儘管我正在滾動到底部,但嘗試在Twitter上處理無限滾動,頁面似乎不會加載動態內容。如何在Twitter上使用CasperJS(PhantomJS)處理無限滾動/動態加載
我做了簡單的測試,看看內容,即使負載用下面的代碼:
casper.open('https://twitter.com/<account>', function() {
this.evaluate(function() {
window.scrollTo(0, document.body.scrollHeight);
});
this.capture('twitter-screenshot.png');
});
,然後將截圖好像它加載,即使我已經設置視口casper.options.viewportSize = { width: 1400, height: 600 };
我檢查了一個實際瀏覽器上的追隨者人數,並且CasperJS上的數字與您在滾動到底部之前加載的初始數字完全相同。因此:
- 它不會觸發滾動上的動態加載,因爲整個視口已加載,所以沒有滾動。
- 滾動沒有正確觸發。
- 什麼我完全缺少
我讀過的截圖功能實際上截圖整個DOM,是當前視實際上並不怎麼樣。我已經在horseman/zombie/casper/phantom中得到了這一點,並且從未得到過滾動條以正常工作。任何提示都會很棒。
編輯1: 在純幻像JS上使用Vaviloff的代碼,我仍然看到相同的錯誤。這是終端輸出:
Writing twitter-1.png...
[1] top = 10064
Writing twitter-2.png...
[2] top = 10064
Writing twitter-3.png...
[3] top = 10064
Writing twitter-4.png...
[4] top = 10064
Writing twitter-5.png...
[5] top = 10064
我注意到,只有twitter-1.png
被寫入到我的文件系統,它是高度令人難以置信的長。在調用任何page.open()
之前,我的視口高度設置爲900
。
我應該補充說我已經在Windows 10
和OSX Yosemite
上進行了測試,並且通過npm安裝了phantomJS 2.1.1
。
編輯2: 看起來像有一些問題,因爲我已經登錄到我的測試帳戶。
編輯3: 如果您登錄到Twitter的,它運行額外的腳本和phantomJS不兼容而拋出這個錯誤TypeError: undefined is not a constructor (evaluating 't.canPlayType(e)')
。這將殺死頁面上的所有JS。不知道如何解決這個問題。
是的,截圖將會很長,因爲PhantomJS渲染整個頁面的高度,這是由程序的設計。截圖的高度會有所不同,因爲不同的推文會有不同的高度。 **編輯1 **請添加'page.onError'回調來檢查錯誤。 **編輯3 **可能是另一個問題的問題。 – Vaviloff