我试图将带有登录信息的对象传递给伪造者page.$eval
,但是该对象在函数上下文中未定义。这是我的代码段:
const loginData = {
user: "user@mail.com",
password: "mypassword"
};
await page.$eval("input[type='email']", el => {
el.value = loginData.user
}, loginData);
await page.$eval("input[type='password']", el => {
el.value = loginData.password
}, loginData);
但是如果我通过字符串文字而不是loginData.user
和loginData.password
我不理解说明:https://github.com/puppeteer/puppeteer/blob/master/docs/api.md#pageevalselector-pagefunction-args中有关如何正确传递其他参数的说明。
或者,page.evaluate
可以正常工作:
await page.evaluate((loginData) => {
document.querySelector("input[type='email']").value = loginData.user;
},loginData);
答案 0 :(得分:1)
您在理解代码中的page.$eval
方法上错了。
const searchValue =等待页面。$ eval('#search',el => el.value);
上面的行正在提取ID为search
,不是相反的方式的选择器的值-写入#search
输入。
因此,要使您的代码传递要在输入元素选择器中编写的参数,您的代码应像这样。
await page.type('input[type="email"]', loginData.user, {delay: 100}); // Types slower, like a user
await page.type('input[type="password"]', loginData.password, {delay: 10}); // Types faster, just like robot
或者,如果您想使用await page.evaluate
await page.evaluate((loginData) => {
document.querySelector("input[type='email']").value = loginData.user;
document.querySelector("input[type='password']").value = loginData.password;
},loginData);