2016-05-13 112 views
0

我想抓取Purestorage Career page來提取Greenhouse的工作列表。當我嘗試通過PhantomJS加載頁面時,我有時會看到包含溫室作業列表job的完整渲染頁面,有時我只會看到沒有溫室網頁的部分渲染頁面。PhantomJS每次頁面加載時都不會進行所有的AJAX調用

眼看Purestorage career page頁面源代碼,我看到下面的代碼

<div class="container" data-component-name="embed-greenhouse" data-component-url="/api/jobs/v1/jobs.ws.json"> 

    <div id="alert-container" class="container"> 
    </div> 


    <div class="row"> 
     <div class="col-sm-12 results-col" id="greenhouse"> 
     </div> 
    </div> 
</div> 

好像他們是通過發出GET請求json url裝載作業。然而,PhantomJS並不總是提出這個要求。

如何確保所有AJAX調用都由PhantomJS進行。這是由於這個特定網站上的特殊代碼結構發生的嗎?

編輯: 我正在使用Phantomjs 2.1.1。我也嘗試在加載頁面之前清除緩存,但沒有運氣。

page.clearMemoryCache(); 
+0

爲什麼使用PhantomJS時只需直接調用API端點? – Eloims

+0

這是一個更一般的問題。我通過PhantomJS抓取了很多網站,這個特殊情況並不是結果數據。 –

回答

0

我在這裏發現了這個問題。在這種特殊情況下,PhantomJS甚至在加載異步JSON文件之前將頁面加載視爲「完成」。在頁面加載之後添加1秒的延遲使腳本有足夠的時間將Greenhouse數據加載到頁面中。

0

這是一個緩存問題,但你說得對,PhantomJs 2.1.1似乎並不尊重clearCache請求。我用PhantomJsCloud.com解決這個問題的方法是在清除緩存請求時刪除磁盤緩存並重新啓動實例。

相關問題