在完成所有脚本和页面加载后如何获取所有html数据? (木偶)
最后,我弄清楚了如何使用Node.js。安装了所有库/扩展。因此puppeteer可以正常工作,但是像以前使用Xmlhttp一样...它仅获取页面的模板/正文,而无需任何信息。页面上的所有脚本都会在浏览器(Web应用程序?)中打开几秒钟后激活。加载整页后,我需要在某些标签内获取信息。另外,我会问,是否有可能使用纯JavaScript,因为我没有使用类似jQuery的代码。所以对我来说难度加倍...
这里是我到目前为止所拥有的。
const puppeteer = require('puppeteer');
const $ = require('cheerio');
let browser;
let page;
const url = "really long link with latitude and attitude";
(async () => puppeteer
.launch()
.then(await function(browser) {
return browser.newPage();
})
.then(await function(page) {
return page.goto(url).then(function() {
return page.content();
});
})
.then(await function(html) {
$('strong', html).each(function() {
console.log($(this).text());
});
})
.catch(function(err) {
//handle error
}))();
我只在强标签内获得模板默认主体元素。但是它应该包含的数据远远超过10个项目。
回答如下:一些注意事项:
您不需要
cheerio
和puppeteer
,也不需要重新解析page.content()
:您已经具有运行所有脚本的完整DOM,并且可以在window
上下文中评估任何代码,例如在浏览器中使用[ C0],并在Web API上下文和Node.js API上下文之间传输可序列化的数据。仅尝试使用异步/等待,这将简化您的代码和流程。
如果需要等到所有脚本和其他依赖项加载完毕,请在
page.evaluate()
中使用page.evaluate()
。如果您怀疑文档脚本需要一些时间才能达到所需的状态,请使用
waitUntil: 'networkidle0'
等各种测试功能,或者使用page.goto()
的功能。
这里是一个简单的脚本,可在页面中输出所有标签名称。
page.goto()
您可以更详细地指定任务,我们可以尝试编写更合适的内容。
www.bezrealitky.cz的脚本(下面注释中的任务):
page.waitForSelector()