-
-
Notifications
You must be signed in to change notification settings - Fork 608
Open
Description
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:
- Call /api/custom_generate
- 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
Labels
No labels