【问题标题】:Can't grab a name from a webpage using puppeteer无法使用 puppeteer 从网页中获取名称
【发布时间】:2019-04-05 05:59:03
【问题描述】:

我在nodepuppeteer 中创建了一个脚本,以获取在填写网页输入时填充的名称。以下是获取该名称的方法 - 打开该网页后,将 16803 放在 CP Number 旁边,然后点击 search 按钮。

我的以下脚本可以通过按搜索按钮成功填写输入并填充名称。我不能做的是获取结果的名称。我定义的选择器完美无缺。我想在不使用 return 的情况下即时获取名称。

到目前为止我已经尝试过:

const puppeteer = require("puppeteer");
const url = "https://www.icsi.in/student/Members/MemberSearch.aspx";

(async () => {
    const browser = await puppeteer.launch({headless:false});
    const [page] = await browser.pages();
    await page.goto(url, {waitUntil: 'networkidle2'});
    await page.type('input[name="dnn$ctr410$MemberSearch$txtCpNumber"]', '16803');
    await page.click('a#dnn_ctr410_MemberSearch_btnSearch');
    await page.waitFor('.name_head > span');
    await page.evaluate(async () => {
        const elem = document.querySelector('.name_head > span').innerText;
        console.log(elem);
    });
    await page.close();
})();

上面的脚本给了我一个空白的输出。

如何从该站点获取名称?

【问题讨论】:

  • 您可能希望返回 elem 并从节点(而不是浏览器)执行 console.log

标签: node.js web-scraping puppeteer


【解决方案1】:

.evaluate 将在浏览器中运行脚本。您需要执行以下操作之一,

返回并在外面记录

大多数情况下,这是您的预期选择。您将需要获取名称并稍后使用它。您可以返回值或 JSHandle。

const elemText = await page.evaluate(async () => document.querySelector('.name_head > span').innerText);
console.log(elemText);

dumpio启用console

当您启动浏览器时,使用dumpio: true 作为选项。它将浏览器进程 stdout 和 stderr 通过管道传输到 process.stdout 和 process.stderr。默认为 false。

puppeteer.launch({dumpio:true})

使用page.on('console') 启用console

page.on('console', msg => console.log('PAGE LOG:', msg.text()));

亲自观看浏览器控制台

使用headless: falsedevtools: true 启动浏览器,您可以自己查看日志。

puppeteer.launch({ headless: false, devtools: true })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2018-11-08
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多