我已经在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();
})();
上面的脚本给了我空白的输出。
如何从该站点获取名称?
答案 0 :(得分:2)
.evaluate
将在浏览器中运行脚本。您需要执行以下一项操作,
大多数情况下,这是您想要的选择。您将需要获取名称并在以后使用。您可以返回值或JSHandle。
const elemText = await page.evaluate(async () => document.querySelector('.name_head > span').innerText);
console.log(elemText);
console
启用dumpio
启动浏览器时,请使用dumpio: true
作为选项。它将浏览器进程stdout和stderr通过管道传送到process.stdout和process.stderr中。默认为false。
puppeteer.launch({dumpio:true})
console
启用page.on('console')
page.on('console', msg => console.log('PAGE LOG:', msg.text()));
使用headless: false
和devtools: true
启动浏览器,您可以自己查看日志。
puppeteer.launch({ headless: false, devtools: true })