Jar*_*rth 1 node.js web-scraping puppeteer
我正在尝试使用以下代码通过 Puppeteer在https://moz.com/login上登录到Moz:
const puppeteer = require('puppeteer');
const creds = {
email: "myemail",
password: "mypassword"
};
(async () => {
const browser = await puppeteer.launch({
args: [
'--disable-web-security',
],
headless: false
});
const page = await browser.newPage();
await page.goto("https://moz.com/login");
await page.$eval("input[name=email]", (el, value) => el.value = value, creds.email);
await page.$eval("input[name=password]", (el, value) => el.value = value, creds.password);
await Promise.all([
page.$eval("input[type=submit]", elem => elem.click()),
page.waitForNavigation({ waitUntil: 'networkidle0' }),
]);
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)
我知道我传递的电子邮件和密码是正确的,因为我可以使用它们手动登录,但是当我运行上面的脚本时,我在表单上方收到“无效的电子邮件或密码”错误。
Chrome 中的 JS 控制台记录了两个错误:
无法加载资源:服务器无法加载资源:服务器与404状态响应()cs.moz.com/id?d_visid_ver=1.10.0&d_fieldgroup=A&mcorgid=2C702C1653CF9B460A490D4B%40AdobeOrg&mid=86471825972219878023490878783607186756&ts=1564059866100:1
和
加载资源失败:服务器响应状态为 400 () svc/forge/forms/login:1
关于问题可能是什么的任何想法?
发生此错误是因为您正在通过执行 javascript 函数$eval而不是函数来设置电子邮件和密码type。
另外,我建议使用click函数而不是$eval函数。阅读有关“受信任”和“不受信任”输入事件之间区别的更多信息
只需替换这些行:
await page.$eval("input[name=email]", (el, value) => el.value = value, creds.email);
await page.$eval("input[name=password]", (el, value) => el.value = value, creds.password);
Run Code Online (Sandbox Code Playgroud)
用这些:
await page.type('input[name=email]', creds.email);
await page.type('input[name=password]', creds.password)
Run Code Online (Sandbox Code Playgroud)
所以你的最终脚本应该是:
const puppeteer = require('puppeteer');
const creds = {
email: "myemail",
password: "mypassword"
};
(async () => {
const browser = await puppeteer.launch({
args: [
'--disable-web-security',
],
headless: false
});
const page = await browser.newPage();
await page.goto("https://moz.com/login");
await page.type('input[name=email]', creds.email);
await page.type('input[name=password]', creds.password)
await Promise.all([
page.click('input[type=submit]'),
page.waitForNavigation({ waitUntil: 'networkidle0' }),
]);
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2224 次 |
| 最近记录: |