2016-11-22 64 views
2

我需要在網頁上滾動以取消某些文本,因爲當用戶滾動瀏覽網站(類似於Facebook或Twitter)時,文本會動態加載。用python,seleniumFirefox(只有幾行代碼)滾動很簡單,但是相同的代碼在phantomJS中不起作用。Python Selenium在滾動Firefox和PhantomJS之間的區別

我認爲問題是我不能用phantomJS設置窗口大小。這是我的測試代碼:

driver = webdriver.Firefox() 
driver.get('https://su.org/') 
print(driver.get_window_size(), driver.get_window_position()) 
driver.save_screenshot('imgs/firefox.png') 
driver.quit() 
>>> {'width': 1024, 'value': None, 'height': 555} {'value': None, 'x': 336, 'y': 28} 

driver = webdriver.PhantomJS() 
driver.get('https://su.org/') 
driver.set_window_size(width=1024, height=555) 
print(driver.get_window_size(), driver.get_window_position()) 
driver.save_screenshot('imgs/phantom2.png') 
driver.quit() 
>>> {'width': 1024, 'height': 555} {'x': 0, 'y': 0} 

這是事實,第二碼打印正確的大小,但如果你看到了保存截圖,第二圖像的大小是錯誤的。 PhantomJS把所有的網站放在窗口中,我可以滾動。我如何才能獲得與Firefox相同的結果?

回答

0

首先 PhantomJS的截圖功能拍攝整個網頁的圖片。如果您的屏幕高度(Phantom案例中的窗口大小)僅爲500px,但網站的高度爲1000px,截圖的高度將爲1000px。所以dirver.get_window_size()screenshot dimensions的區別可能是由於此。我不知道Firefox是否也適用。


一些幫助你調試: -

  • 許多內容交付網絡阻塞有PhantomJS。他們可以識別出您正在使用無頭瀏覽器。他們假設你有惡意的意圖,因此不提供CSS或JS資源,並且你得到一個空白頁面。

  • PhantomJS尚未完全支持ECMA 6腳本(2016年11月24日)。所以我注意到有些東西在Firefox上工作,但是他們在PhantomJS中發佈了錯誤。

  • 閱讀PhantomJS瀏覽器日誌。它們包含錯誤,警告等,這將有助於調試問題。 (如果你可以在這裏發佈內容,這將是非常有幫助的)

  • 使用time.sleep(3)給網站一些時間來加載動態內容。

  • 仿真一個真正的瀏覽器。更改UserAgent字符串以匹配真實的瀏覽器。下面給出的代碼片段。

代碼: -

from selenium import webdriver 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 

dcap = dict(DesiredCapabilities.PHANTOMJS) 
dcap["phantomjs.page.settings.userAgent"] = ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36") 

driver = webdriver.PhantomJS(desired_capabilities=dcap) 
# code to visit and perform actions 
  • 嘗試其他的互聯網連接或使用代理服務器。有可能你已經從一個特定的CDN請求了很多東西。

好要牢記: -如果您正在測試與幻影web應用程序,嘗試在本地服務的資產,而不是從CDN。這可以讓你免受很多痛苦,因爲大部分因素都在你的掌控之中。

相關問題