node.js - Puppeteer 找不到元素
问题描述
我一直试图让 puppeteer 获得任务计划者帐户上的登录按钮,但它返回错误“PS C:\Users\leticia.queiroz\Visual Studio> node Teste2.js (node:14920) UnhandledPromiseRejectionWarning: Error:找不到选择器的节点”
我提交的代码是:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://tasks.office.com/')
await page.click('#plannerSignInButton')
await page.waitForSelector('input[id="i0116"]', {
visible: true,
});
await page.click('input[id="i0116"]')
await page.type('input[id="i0116"]','user@example.login.com')
await browser.close();
})()
我从开发人员见解中获得的 html 代码是:
<input type="email" name="loginfmt" id="i0116" maxlength="113" class="form-control ltr_override input ext-input text-box ext-text-box" aria-required="true" data-bind="
attr: { lang: svr.fApplyAsciiRegexOnInput ? null : 'en' },
externalCss: {
'input': true,
'text-box': true,
'has-error': usernameTextbox.error },
ariaLabel: tenantBranding.unsafe_userIdLabel || str['CT_PWD_STR_Username_AriaLabel'],
ariaDescribedBy: 'loginHeader' + (pageDescription && !svr.fHideLoginDesc ? ' loginDescription usernameError' : ' usernameError'),
textInput: usernameTextbox.value,
hasFocusEx: usernameTextbox.focused,
placeholder: $placeholderText" aria-label="Insira o seu email, telefone ou Skype." aria-describedby="loginHeader usernameError" placeholder="Email, telefone ou Skype">
解决方案
您的代码移动得太快,并试图在按钮#plannerSignInButton
在 DOM 中可用之前单击它。预先添加和await
a 的返回值:waitForSelector
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://tasks.office.com/')
await page.waitForSelector('#plannerSignInButton');
await page.click('#plannerSignInButton')
await page.waitForSelector('input[id="i0116"]', {
visible: true,
});
await page.click('input[id="i0116"]')
await page.type('input[id="i0116"]','user@example.login.com')
await browser.close();
})()
推荐阅读
- prolog - 序言切“!” erlang中的运算符
- java - 将 Spring Boot WebMvcConfigurer 限制为仅指定路径
- java - 如何在使用 prod 数据库时停止 java 实体以获取保存#java
- r - 按特定列分组并在 Python 中使用 dplython 汇总行数
- javascript - 如何在不使用叠加层的情况下标记开放层中的特征
- ruby-on-rails - 如何更改 Rspec 中的默认控制器?
- javascript - 如何使用 CodeMirror 在 TextArea 中添加值
- r - as.POSIXlt.numeric(x, tz = tz(x)) 中的错误:必须提供“原点”
- node.js - AWS SES 中的电子邮件问题
- sonarqube - Sonarqube git ci 推送拒绝