Skip to content

API times out (change in Suno UI?) #241

@guillefixx

Description

@guillefixx

Describe the bug

I believe Suno's website UI recently changed, which is making playwright fail to find the create button. Inside of src/lib/SunoApi.ts:

const button = page.locator('button[aria-label="Create"]').locator('div.flex');
this.click(button);

I tried changing it to be like this but got the same issue:

const button = page.locator('div:has-text("Create")');
this.click(button);

Below you will find the full trace of my terminal.

To Reproduce
Steps to reproduce the behavior:

  1. Call /api/custom_generate
  2. See error

Expected behavior
Two generated songs should be retrieved as a response.

Desktop:

  • OS: Linux (Raspberry OS) and MacOS 15.3.1
  • Browser: Chromium
  • Version: 131

Additional context
Full terminal trace:


> [email protected] dev
> next dev

 ⚠ Port 3000 is in use, trying 3001 instead.
   ▲ Next.js 14.1.4
   - Local:        http://localhost:3001
   - Environments: .env
   - Experiments (use at your own risk):
     · serverMinification

 ✓ Ready in 3.3s
 ○ Compiling /docs ...
 ✓ Compiled /api/custom_generate in 13.4s (3234 modules)
{"level":30,"time":1741776545177,"pid":13913,"hostname":"MBP-C02DV36JMD6N","msg":"Getting the session ID"}
{"level":30,"time":1741776546018,"pid":13913,"hostname":"MBP-C02DV36JMD6N","msg":"KeepAlive...\n"}
{"level":30,"time":1741776546233,"pid":13913,"hostname":"MBP-C02DV36JMD6N","msg":"KeepAlive...\n"}
 ✓ Compiled in 2.4s (1997 modules)
{"level":30,"time":1741776547148,"pid":13913,"hostname":"MBP-C02DV36JMD6N","required":true}
{"level":30,"time":1741776547148,"pid":13913,"hostname":"MBP-C02DV36JMD6N","msg":"CAPTCHA required. Launching browser..."}
{"level":30,"time":1741776548146,"pid":13913,"hostname":"MBP-C02DV36JMD6N","msg":"Waiting for Suno interface to load"}
{"level":30,"time":1741776551015,"pid":13913,"hostname":"MBP-C02DV36JMD6N","msg":"Triggering the CAPTCHA"}
Timeout 30000ms exceeded.
Call log:
  - waiting for locator('button[aria-label="Create"]').locator('div.flex')

    at captureRawStack (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/utils/stackTrace.js:50:17)
    at captureLibraryStackTrace (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/utils/stackTrace.js:56:17)
    at Frame._wrapApiCall (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/channelOwner.js:167:65)
    at Proxy.eval (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/channelOwner.js:128:33)
    at Frame.click (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/frame.js:291:32)
    at Locator.click (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/locator.js:90:30)
    at SunoApi.click (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:192:32)
    at SunoApi.getCaptcha (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:294:14)
    at async SunoApi.generateSongs (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:473:20)
    at async SunoApi.custom_generate (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:444:24)
    at async POST (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/app/api/custom_generate/route.ts:23:31)
    at /Users/myuser/Documents/scripts/suno-api/async /Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:63809
    at async eU.execute (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:53964)
    at async eU.handle (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:65062)
    at async doRender (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1317:42)
    at async cacheEntry.responseCache.get.routeKind (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1539:28)
    at async DevServer.renderToResponseWithComponentsImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1447:28)
    at async DevServer.renderPageComponent (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1844:24)
    at async DevServer.renderToResponseImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1882:32)
    at async DevServer.pipeImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:895:25)
    at async NextNodeServer.handleCatchallRenderRequest (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/next-server.js:269:17)
    at async DevServer.handleRequestImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:791:17)
    at /Users/myuser/Documents/scripts/suno-api/async /Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/dev/next-dev-server.js:331:20
    at async Span.traceAsyncFn (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/trace/trace.js:151:20)
    at async DevServer.handleRequest (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/dev/next-dev-server.js:328:24)
    at async invokeRender (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/router-server.js:174:21)
    at async handleRequest (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/router-server.js:353:24)
    at async requestHandlerImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/router-server.js:377:13)
    at async Server.requestListener (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/start-server.js:140:13) {
  name: 'TimeoutError'
}
Timeout 30000ms exceeded.
Call log:
  - waiting for locator('button[aria-label="Create"]').locator('div.flex')

    at captureRawStack (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/utils/stackTrace.js:50:17)
    at captureLibraryStackTrace (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/utils/stackTrace.js:56:17)
    at Frame._wrapApiCall (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/channelOwner.js:167:65)
    at Proxy.eval (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/channelOwner.js:128:33)
    at Frame.click (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/frame.js:291:32)
    at Locator.click (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/locator.js:90:30)
    at SunoApi.click (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:192:32)
    at SunoApi.getCaptcha (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:294:14)
    at async SunoApi.generateSongs (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:473:20)
    at async SunoApi.custom_generate (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:444:24)
    at async POST (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/app/api/custom_generate/route.ts:23:31)
    at /Users/myuser/Documents/scripts/suno-api/async /Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:63809
    at async eU.execute (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:53964)
    at async eU.handle (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:65062)
    at async doRender (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1317:42)
    at async cacheEntry.responseCache.get.routeKind (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1539:28)
    at async DevServer.renderToResponseWithComponentsImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1447:28)
    at async DevServer.renderPageComponent (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1844:24)
    at async DevServer.renderToResponseImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1882:32)
    at async DevServer.pipeImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:895:25)
    at async NextNodeServer.handleCatchallRenderRequest (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/next-server.js:269:17)
    at async DevServer.handleRequestImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:791:17)
    at /Users/myuser/Documents/scripts/suno-api/async /Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/dev/next-dev-server.js:331:20
    at async Span.traceAsyncFn (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/trace/trace.js:151:20)
    at async DevServer.handleRequest (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/dev/next-dev-server.js:328:24)
    at async invokeRender (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/router-server.js:174:21)
    at async handleRequest (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/router-server.js:353:24)
    at async requestHandlerImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/router-server.js:377:13)
    at async Server.requestListener (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/start-server.js:140:13) {
  name: 'TimeoutError'
}
 ⨯ unhandledRejection: Timeout 30000ms exceeded.
Call log:
  - waiting for locator('button[aria-label="Create"]').locator('div.flex')

    at captureRawStack (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/utils/stackTrace.js:50:17)
    at captureLibraryStackTrace (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/utils/stackTrace.js:56:17)
    at Frame._wrapApiCall (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/channelOwner.js:167:65)
    at Proxy.eval (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/channelOwner.js:128:33)
    at Frame.click (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/frame.js:291:32)
    at Locator.click (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/locator.js:90:30)
    at SunoApi.click (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:192:32)
    at SunoApi.getCaptcha (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:294:14)
    at async SunoApi.generateSongs (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:473:20)
    at async SunoApi.custom_generate (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:444:24)
    at async POST (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/app/api/custom_generate/route.ts:23:31)
    at /Users/myuser/Documents/scripts/suno-api/async /Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:63809
    at async eU.execute (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:53964)
    at async eU.handle (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:65062)
    at async doRender (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1317:42)
    at async cacheEntry.responseCache.get.routeKind (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1539:28)
    at async DevServer.renderToResponseWithComponentsImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1447:28)
    at async DevServer.renderPageComponent (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1844:24)
    at async DevServer.renderToResponseImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1882:32)
    at async DevServer.pipeImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:895:25)
    at async NextNodeServer.handleCatchallRenderRequest (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/next-server.js:269:17)
    at async DevServer.handleRequestImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:791:17)
    at /Users/myuser/Documents/scripts/suno-api/async /Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/dev/next-dev-server.js:331:20
    at async Span.traceAsyncFn (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/trace/trace.js:151:20)
    at async DevServer.handleRequest (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/dev/next-dev-server.js:328:24)
    at async invokeRender (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/router-server.js:174:21)
    at async handleRequest (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/router-server.js:353:24)
    at async requestHandlerImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/router-server.js:377:13)
    at async Server.requestListener (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/start-server.js:140:13) {
  name: 'TimeoutError'
}
 ⨯ unhandledRejection: Timeout 30000ms exceeded.
Call log:
  - waiting for locator('button[aria-label="Create"]').locator('div.flex')

    at captureRawStack (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/utils/stackTrace.js:50:17)
    at captureLibraryStackTrace (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/utils/stackTrace.js:56:17)
    at Frame._wrapApiCall (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/channelOwner.js:167:65)
    at Proxy.eval (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/channelOwner.js:128:33)
    at Frame.click (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/frame.js:291:32)
    at Locator.click (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/node_modules/rebrowser-playwright-core/lib/client/locator.js:90:30)
    at SunoApi.click (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:192:32)
    at SunoApi.getCaptcha (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:294:14)
    at async SunoApi.generateSongs (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:473:20)
    at async SunoApi.custom_generate (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/lib/SunoApi.ts:444:24)
    at async POST (/Users/myuser/Documents/scripts/suno-api/webpack-internal:/(rsc)/src/app/api/custom_generate/route.ts:23:31)
    at /Users/myuser/Documents/scripts/suno-api/async /Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:63809
    at async eU.execute (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:53964)
    at async eU.handle (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:65062)
    at async doRender (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1317:42)
    at async cacheEntry.responseCache.get.routeKind (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1539:28)
    at async DevServer.renderToResponseWithComponentsImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1447:28)
    at async DevServer.renderPageComponent (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1844:24)
    at async DevServer.renderToResponseImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:1882:32)
    at async DevServer.pipeImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:895:25)
    at async NextNodeServer.handleCatchallRenderRequest (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/next-server.js:269:17)
    at async DevServer.handleRequestImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/base-server.js:791:17)
    at /Users/myuser/Documents/scripts/suno-api/async /Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/dev/next-dev-server.js:331:20
    at async Span.traceAsyncFn (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/trace/trace.js:151:20)
    at async DevServer.handleRequest (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/dev/next-dev-server.js:328:24)
    at async invokeRender (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/router-server.js:174:21)
    at async handleRequest (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/router-server.js:353:24)
    at async requestHandlerImpl (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/router-server.js:377:13)
    at async Server.requestListener (/Users/myuser/Documents/scripts/suno-api/node_modules/next/dist/server/lib/start-server.js:140:13) {
  name: 'TimeoutError'
}
Error: No hCaptcha request occurred within 1 minute.
    at Timeout.eval [as _onTimeout] (webpack-internal:///(rsc)/./src/lib/utils.ts:76:24)
    at listOnTimeout (node:internal/timers:569:17)
    at process.processTimers (node:internal/timers:512:7)
Error: No hCaptcha request occurred within 1 minute.
    at Timeout.eval [as _onTimeout] (webpack-internal:///(rsc)/./src/lib/utils.ts:76:24)
    at listOnTimeout (node:internal/timers:569:17)
    at process.processTimers (node:internal/timers:512:7)
 ⨯ src/lib/utils.ts (83:15) @ Timeout.eval [as _onTimeout]
 ⨯ unhandledRejection: Error: No hCaptcha request occurred within 1 minute.
    at Timeout.eval [as _onTimeout] (webpack-internal:///(rsc)/./src/lib/utils.ts:76:24)
    at listOnTimeout (node:internal/timers:569:17)
    at process.processTimers (node:internal/timers:512:7)
  81 |         page.off('request', onRequest);
  82 |         cleanupListeners();
> 83 |         reject(new Error('No hCaptcha request occurred within 1 minute.'));
     |               ^
  84 |       } else {
  85 |         // Start waiting for no hCaptcha requests
  86 |         resetTimeout();
 ⨯ src/lib/utils.ts (83:15) @ Timeout.eval [as _onTimeout]
 ⨯ unhandledRejection: Error: No hCaptcha request occurred within 1 minute.
    at Timeout.eval [as _onTimeout] (webpack-internal:///(rsc)/./src/lib/utils.ts:76:24)
    at listOnTimeout (node:internal/timers:569:17)
    at process.processTimers (node:internal/timers:512:7)
  81 |         page.off('request', onRequest);
  82 |         cleanupListeners();
> 83 |         reject(new Error('No hCaptcha request occurred within 1 minute.'));
     |               ^
  84 |       } else {
  85 |         // Start waiting for no hCaptcha requests
  86 |         resetTimeout();

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions