gpt4 book ai didi

javascript - 如何在加载完成 PhantomJS 时检测真实页面

转载 作者:行者123 更新时间:2023-11-30 15:26:50 25 4
gpt4 key购买 nike

我正在尝试使用 PhantomJS 在 Wordpress 上自动下载主题。按照我的脚本,页面在停止加载之前不会被评估,问题如下:

当我试图点击页面上的一个元素时,它还不可见,因为仍然需要返回对他们数据库的查询。即使页面已被认为已完成加载,但仍然缺少一个重要部分。看看下面:

enter image description here

此页面是在本应单击 立即安装 按钮后呈现的。如您所见,主题卡甚至还没有出现。相反,唯一可以看到的是小旋转器。

这个小家伙一直在导致任何与主题相关的脚本变成空对象,这显然是非常不可取的。

有人知道我该如何解决这个问题吗?我已经尝试过 setTimeout() 但这是一个非常丑陋的方法,实际上在我的测试中从未成功过。谢谢!

补充信息我的程序的所有功能都在设定的时间后执行。这是通过实现 setInterval 属性来实现的。它工作完美,但现在我的问题的解决方案是如何在函数执行时动态设置间隔时间?

以下代码示例:

    var steps = [
function() {
console.log('Going')
page.open('http://google.com')
//Does not need too much time.
},
function() {
console.log('Searching')
page.evaluate(function() {
//BIG Task List Here, Needs A lot of Time
})
}]
//How the interval is set:

setInterval(executeRequestsStepByStep, 250)
function executeRequestsStepByStep(){
if (loading == false && steps[stepindex]) {
steps[stepindex]()
stepindex++
}
if (!steps[stepindex]) {
phantom.exit()
}
}
page.onLoadStarted = function() { loading = true }
page.onLoadFinished = function() { loading = false }

关于我们如何实现这一点有什么想法吗?

最佳答案

等待整个页面加载的一种方法是监听 page.onLoadFinished 回调,如果它在 N 秒内没有再次调用,则认为页面已完成加载。

另一种方法是比较 page.onResourceReceivedonResourceRequested 调用计数(可能考虑 onResourceError)。但是乏味且不可靠。

上面的两个选项都不适用于 ajax 请求,因为显然它不是初始页面加载周期的一部分。

我想您的微调器是在 ajax 请求期间生成的,因此最好的办法可能是等待微调器消失。我还建议包括一个单独的更大的安全超时,例如 30 秒,之后 phantom.exit(1) 将被调用。因此,如果这个 ajax 调用永远不会完成,您的脚本将不会无限期地挂起。

关于javascript - 如何在加载完成 PhantomJS 时检测真实页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42826448/

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