【问题标题】:page.type() inside page.evaluate()page.type() 内 page.evaluate()
【发布时间】:2021-05-03 01:53:42
【问题描述】:

我想在下面的输入class中输入一些用户详细信息

<span class="myClass">
    <input aria-autocomplete="list" role="searchbox" aria-haspopup="true" class="ng-tns-c58-69" 
    autocomplete="off" type="text" aria-controls="pr_id_7_list" aria-expanded="false" aria- 
    activedescendant="p-highlighted-option" placeholder="Pass" size="24" maxlength="16">
</span>

首先,我尝试使用page.$eval()方法输入详细信息

let domain = 'input[class=ng-tns-c58-69]';
await page.$eval(domain, (el, value) => el.value = value, pass.name);

但它抛出了错误:

Error: Evaluation failed: DOMException: Failed to execute 'querySelector' on 'Document': 
'input[class=ng-tns-c58-69]' is not a valid selector.

然后我用page.evaluate()方法作为

await page.evaluate(() => {
    let domain = 'ng-tns-c58-69';
    let elements = document.getElementsByClassName(domain);
    for (let el of elements) {
        el.click();
        el.keyboard.type(passenger[0].name, {delay: 100});
    }
})

这给出了错误提示:

Error: Evaluation failed: TypeError: Cannot read property 'type' of undefined

我是木偶师的新手,请帮助我。 谢谢。

【问题讨论】:

  • 第一个例子中input.ng-tns-c58-69作为选择器怎么样?
  • @pavelsaman,对不起,我意识到我不应该回答自己。你会发布解决方案吗? (我会删除我的)
  • 我想你可以回答你自己的问题,没问题。保持这种方式。

标签: javascript web-scraping puppeteer webautomation


【解决方案1】:

按照 pavelsaman 的建议,使用 input.ng-tns-c58-69page.$eval() 方法并且它有效。这是最终代码:

let domain = 'input.ng-tns-c58-69';
await page.$eval(domain, (el, value) => el.value = value, pass.name);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 2021-04-21
    • 2020-03-29
    • 2020-12-21
    相关资源
    最近更新 更多