Я пытаюсь использовать puppeteer для входа на страницу авторизации Google.До сих пор я смог заставить кукловода успешно ввести имя пользователя, пароль и 2FA.Затем меня перенаправляют на эту страницу согласия Google
Но кукловод не может нажать кнопку «Разрешить» и выдает следующую ошибку:
typing email...
clicking next button...
waiting for password field...
typing password...
clicking next button...
waiting for consent approval...
clicking Allow button...
(node:87043) UnhandledPromiseRejectionWarning: Error: No node found for selector: #submit_approve_access
at assert (/Users/mohamed/projects/googleAuth/api/src/test/resources/dev-tools/node_modules/puppeteer/lib/helper.js:278:11)
at Frame.click (/Users/mohamed/projects/googleAuth/api/src/test/resources/dev-tools/node_modules/puppeteer/lib/FrameManager.js:736:5)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:189:7)
-- ASYNC --
at Frame.<anonymous> (/Users/mohamed/projects/googleAuth/api/src/test/resources/dev-tools/node_modules/puppeteer/lib/helper.js:144:27)
at Page.click (/Users/mohamed/projects/googleAuth/api/src/test/resources/dev-tools/node_modules/puppeteer/lib/Page.js:973:29)
at doLogin (/Users/mohamed/projects/googleAuth/api/src/test/resources/dev-tools/routes/index.js:177:16)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:189:7)
(node:87043) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:87043) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Ниже приведен код Node.js, который я написал:
async function doLogin(authorizeUrl) {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto(authorizeUrl);
await page.mainFrame().waitForSelector('#identifierId');
console.log('typing email...');
await page.type('#identifierId', googleCredentials.username);
await page.mainFrame().waitForSelector('#identifierNext');
console.log('clicking next button...');
await page.click('#identifierNext');
console.log('waiting for password field...');
await page
.mainFrame()
.waitForSelector('#password input[type="password"]', {visible: true});
console.log('typing password...');
await page.type('#password input[type="password"]', googleCredentials.password, {
delay: 100,
});
console.log('clicking next button...');
await page.click('#passwordNext', {delay: 100});
console.log('waiting for consent approval...');
console.log('clicking Allow button...');
await page.click('#submit_approve_access', {delay: 100});
return browser;
}