【问题标题】:Trouble passing variable to puppeteer's page.$eval无法将变量传递给 puppeteer 的页面。$eval
【发布时间】:2019-12-21 14:23:29
【问题描述】:

我正在尝试将带有登录信息的对象传递给 puppeteers page.$eval,但该对象在函数上下文中未定义。这是我的sn-p:

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

【问题讨论】:

    标签: puppeteer


    【解决方案1】:

    您错误地理解了代码中的page.$eval 方法。

    const searchValue = await page.$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);
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多