无法使用puppeteer从网页中获取名称

问题描述 投票:0回答:1

我在node中创建了一个与puppeteer结合的脚本来获取一个填写网页输入时填充的名称。以下是如何获得该名称 - 在打开该网页后,将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();
})();

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

如何从该站点获取名称?

node.js web-scraping puppeteer
1个回答
2
投票

.evaluate将在浏览器中运行脚本。你需要做下面的一个,

Return and log it outside

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

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

Enable console with dumpio

启动浏览器时,请使用dumpio: true作为选项。它会将浏览器进程stdout和stderr传递给process.stdout和process.stderr。默认为false。

puppeteer.launch({dumpio:true})

Enable console with page.on('console')

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

Watch the browser console yourself

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

puppeteer.launch({ headless: false, devtools: true })
© www.soinside.com 2019 - 2024. All rights reserved.