gpt4 book ai didi

javascript - 调用PhantomJs函数

转载 作者:行者123 更新时间:2023-11-28 01:31:57 25 4
gpt4 key购买 nike

我是 Java 脚本新手,我需要帮助:)我想调用函数( set_calendar_date() ),然后获取页面innerHTML。

<a onclick="set_calendar_date('1'); return false;" href="#">

<span>

26/02 We

</span>

PhantomJs 代码:

page.open(url, function (status) {
if (status !== 'success')
{
console.log('Unable to access network');
}
else
{
var events = page.evaluate(function () {
// here i want to call set_calendar_date();
return document.getElementById('fs').innerHTML;
});
var file= require('fs');
file.write('results.txt',events,'w+');

phantom.exit();
}});

最佳答案

看来函数set_calendar_date执行时会通过ajax加载内容或者做一些处理来生成内容。该内容将被放置在某个位置,可能位于 id fs 的元素内。

考虑到此过程的异步性质,您不能在调用该函数后直接返回innerHTML(您可能会得到旧数据或根本什么也得不到)。

我建议调用evaluate内部的函数

    page.evaluate(function () {
set_calendar_date('1');
});

接下来,您需要了解“更新”的本质。查找一个可以帮助以编程方式确定更新完成或尚未完成的元素。例如,如果 ID 为 fs 的元素的 innherHTML 为空,则内容尚未更新。

然后继续检查目标元素(vis、fs)中的更改。您可以使用 window.setInterval 继续检查这一点。

代码可以类似于:

page.evaluate(function () {
set_calendar_date('1');
});

var waiter = window.setInterval(function(){
var fsContent = page.evaluate(function(){
var elm = document.getElementById('fs');
return elm && elm.innerHTML || false;
});
// if content is found
if (fsContent !== false) {
window.clearInterval(waiter);
var file= require('fs');
file.write('results.txt',fsContent,'w+');
}

}, 300);

注意:这可以使用 CasperJS(PhantomJS 的包装器)通过更简单的代码来实现。 CasperJS 提供了许多函数来轻松完成此操作,例如使用 waitForSelectorTextChange()waitFor()waitForSelector()waitWhileSelector( ) 等等

关于javascript - 调用PhantomJs函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22015502/

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