gpt4 book ai didi

javascript - phantomjs - 页面加载后执行 Javascript 函数,然后输出新的更改

转载 作者:行者123 更新时间:2023-11-28 06:21:40 25 4
gpt4 key购买 nike

我使用 phantomjs 2.1.1,有些事情困扰着我。这是我用来抓取 url 的代码,并将网站的 html 写入到 output.html 文件中

page = require('webpage').create();
page.open(url, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit();
} else {
window.setTimeout(function () {
var content = page.content;
fs.write("output.html", content, 'w');
}, 40000); //40 seconds timeout
}
});

现在,我还需要抓取它的分页。接下来的页面由 javascript 函数 page(2) 加载;或第(3)页;我尝试使用

来完成它
 var pageinationOutput = page.evaluate(function (s) {
page(2);
});
console.log(pageinationOutput); // I need the output made by the `page(2);` call.

page = require('webpage').create();
page.open(url, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit();
} else {
window.setTimeout(function () {
var content = page.content;
fs.write("output.html", content, 'w');
}, 40000); //40 seconds timeout
}
});

但是我没有得到任何输出。如何在页面加载完成后执行 JavaScript 函数并获取 javascript 执行后网站内容发生的新更改,在这种情况下网站将调用下一个页面(使用 ajax)第(2)页之后;方法调用。

提前致谢!

最佳答案

我自己找到了解决方案,但我不确定这是否是完美的方法。

代码:

page.open(url, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit();
} else {
window.setTimeout(function () {
var content = page.content;
fs.write("output.html", content, 'w');
page.evaluate(function (cb) {
window.page(2);
});
var waiter = window.setInterval(function () {
var nextPageContent = page.evaluate(function (cb) {
return document.documentElement.outerHTML;
});
if (nextPageContent !== false) {
window.clearInterval(waiter);
fs.write("output-2.html", content, 'w');
}
}, 40000);//40 seconds timeout

}, 40000);//40 seconds timeout
}
});

关于javascript - phantomjs - 页面加载后执行 Javascript 函数,然后输出新的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35472991/

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