首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Puppeteer无效选择器

Puppeteer无效选择器
EN

Stack Overflow用户
提问于 2018-11-14 19:59:50
回答 2查看 840关注 0票数 1

我试图在网页上用Puppeteer填充一个表单,输入有一个id,我将它用作选择器。

ID为:

代码语言:javascript
复制
#loginPage:SiteTemplate:formulaire:login-field

当我从chrome得到选择器时,它给了我:

代码语言:javascript
复制
#loginPage\3a SiteTemplate\3a formulaire\3a login-field

无论我是把第一个选项还是第二个选项放在Puppeteer中,它都会给出这个错误:

代码语言:javascript
复制
Error: Evaluation failed: DOMException: Failed to execute 'querySelector' on 'Document': '#loginPage:SiteTemplate:formulaire:login-field' is not a valid selector.

如果需要,代码如下:

代码语言:javascript
复制
(async () => {
    const browser = await puppeteer.launch({headless: false});
    const page = await browser.newPage();
    await page.goto('XXX');
    await page.click(GOTO_LOGIN_BUTTON_SELECTOR)
    await page.waitForNavigation({waitUntil: 'load'});
    await page.waitFor(EMAIL_SELECTOR); // here
    await page.focus(EMAIL_SELECTOR);
    await page.keyboard.type(CREDS.email);
    await page.focus(PASSWORD_SELECTOR);
    await page.keyboard.type(CREDS.password);

    await browser.close();
})();
EN

回答 2

Stack Overflow用户

发布于 2018-11-14 22:57:47

对于这样的ID,一种选择是执行以下操作:

代码语言:javascript
复制
const EMAIL_SELECTOR = '[id="loginPage:SiteTemplate:formulaire:login-field"]';

或者,如果这不起作用,可以按如下方式将其拆分,以解决:的使用问题

代码语言:javascript
复制
const EMAIL_SELECTOR = '[id*="loginPage"][id*="SiteTemplate"][id*="formulaire"][id*="login-field"]';

希望其中的一个(或两个)能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2018-11-15 17:08:28

我不确定,但我会去掉await page.waitForNavigation({waitUntil: 'load'});这行

并替换await page.waitFor(EMAIL_SELECTOR); // here

使用await page.waitForSelector(EMAIL_SELECTOR);

并测试是否只使用#login-field或其他#loginPage > SiteTemplate > formulaire > login-field

我可能是错的,因为我还在解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53299763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档