我试图在网页上用Puppeteer填充一个表单,输入有一个id,我将它用作选择器。
ID为:
#loginPage:SiteTemplate:formulaire:login-field当我从chrome得到选择器时,它给了我:
#loginPage\3a SiteTemplate\3a formulaire\3a login-field无论我是把第一个选项还是第二个选项放在Puppeteer中,它都会给出这个错误:
Error: Evaluation failed: DOMException: Failed to execute 'querySelector' on 'Document': '#loginPage:SiteTemplate:formulaire:login-field' is not a valid selector.如果需要,代码如下:
(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();
})();发布于 2018-11-14 22:57:47
对于这样的ID,一种选择是执行以下操作:
const EMAIL_SELECTOR = '[id="loginPage:SiteTemplate:formulaire:login-field"]';或者,如果这不起作用,可以按如下方式将其拆分,以解决:的使用问题
const EMAIL_SELECTOR = '[id*="loginPage"][id*="SiteTemplate"][id*="formulaire"][id*="login-field"]';希望其中的一个(或两个)能有所帮助!
发布于 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
我可能是错的,因为我还在解决这个问题。
https://stackoverflow.com/questions/53299763
复制相似问题