PhantomJS多页意想不到的负载行为(PhantomJS unexpected load beh

2019-09-16 20:06发布

我有一个脚本(下面),该刮擦带有3步骤处理的位点。 当设置为在同一时间最多1页它的伟大工程。 然而,当我增加2个在同一时间,事情开始变得靠不住的。 在onFinished火灾早于我希望和页面还没有完全加载。 因为这是我的脚本休息休息。 任何想法,为什么这可能发生? 我要补充,我使用的最新版本(1.5)。

MAX_PAGES = 1
### 
changing MAX_PAGES to >1 causes some pages onFinished event to fire before
the page is fully rendered.  this is evident by the fact that there are >1 images
for some pages.  i havent been able to reproduce using microsoft.com, but on some
pages i was working on the first onLoadFinished seemed to be called before the page
was actually fully loaded based on the look of the rendered images
###

newPage = (id) ->
context = {}
context.id = id
context.step = 0
context.page = require('webpage').create()
context.page.onLoadStarted = ->
    context.step++
context.page.onLoadFinished = (status) ->
    console.log status
    if status is 'success'
        context.page.render("#{context.id}_#{context.step}.png")
    else
        context.page.release()
        context.page.open('http://www.microsoft.com')
        console.log 'started loading'

newPage id for id in [1..MAX_PAGES]

Answer 1:

我认为这个问题是与事实是内PhantomJS每个网页使用相同的QNetworkAccessManager,因此,做成品()时,每个网页对象完成加载信号发射。 修改PhantomJS的代码可能需要为了解决这个问题作出。 我试图加载在PhantomJS并行多页的时候才注意到了这一点。 我工作的一个应用程序同时使用QtWebKit的和负载的多个页面,所以我必须确保每个网页都有自己的QNetworkAccessManager使成品()信号不会相互干扰。



Answer 2:

要抓取多个页面,看到是捆绑在一起的库的例子follow.js。 https://github.com/ariya/phantomjs/blob/master/examples/follow.js

你需要使用递归来等待当前页面加载下一页之前加载。



文章来源: PhantomJS unexpected load behavior with multiple pages