无法将变量传递到操纵up的页面。

时间:2019-12-21 14:23:29

标签: puppeteer

我试图将带有登录信息的对象传递给伪造者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.userloginData.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);

1 个答案:

答案 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);