gpt4 book ai didi

javascript - 如何在node-js环境中使用phantomjs进行动态页面网页抓取?

转载 作者:行者123 更新时间:2023-11-28 05:45:38 24 4
gpt4 key购买 nike

我正在致力于网络抓取,但几乎没有任务需要完成。

我使用node-js 请求模块进行页面抓取。

它运行良好,非常适合 cookie session 等。

但是当需要渲染使用某些 JavaScript 框架构建动态页面(如 ANGULARBACKBONE 等)时,它会失败。

我正在尝试让 phantomjs 克服这个问题,因为我在谷歌上发现解决这种情况很有帮助。

我还发现了一个用于 phantomjs 的 Nodejs 桥 phantom

使用 phantomjs 和这个桥接模块,我能够实现同样的事情。

var phantom = require('phantom');
var fs = require('fs');

var sitepage = null;
var phInstance = null;
phantom.create()
.then(instance => {
phInstance = instance;
console.log("Instance created");
return instance.createPage();
})
.then(page => {
sitepage = page;
console.log("createing page");
return page.open('https://paytm.com/shop/p/carrier-estrella-plus-1-5-ton-3-star-window-ac-LARCARRIER-ESTRPLAN5550519593A34?src=grid&tracker=%7C%7C%7C%7C%2Fg%2Felectronics%2Flarge-appliances%2F1-5-ton-3-star-ac-starting-at-rs-22699%7C88040%7C1');
})
.then(status => {
//console.log(status);
console.log("getting content of page");
return sitepage.property('content');
})
.then(content => {
console.log("success");
//console.log(content);
fs.writeFile("ok.text", content);
sitepage.close();
phInstance.exit();
})
.catch(error => {
console.log("errr");
//console.log(error);
phInstance.exit();
});

上面是我尝试加载使用 Angular 框架构建的动态网站页面之一的代码。

任何人都可以指导我在上面的代码中找到相同或正确的地方,因为我缺少正确的东西。

最佳答案

您是在动态代码运行之前获取页面内容,您需要等待加载完成。

page.open 后面的 block 需要等待页面完成,如果您知道正在从后端获取一个元素,您可以等待该元素(请参阅 phantomjs 文档中的 waitfor 示例) )。

关于javascript - 如何在node-js环境中使用phantomjs进行动态页面网页抓取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38552109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com