2016-07-31 41 views
2

我有一個簡單的網絡爬蟲,登錄到Twitter,轉到下一頁,然後通過點擊所有我的追隨者(如果他們被靜音等)齒輪圖標。問題是點擊功能已停止在我的新電腦上工作。使用python,selenium和pyvirtualdisplay點擊web元素的問題

此外,我使用Firefox()網絡驅動程序。

這裏是我使用(需要添加自己的憑據Twitter並得到它的工作)的代碼:https://gist.github.com/anonymous/4c64054d01af77ae2c5c2b39a2165d80

此代碼工作完全正常一臺機器上,但不能點擊DOM元素另外一個。以下是一些可能提供見解的規格。

::GOOD BOX:: 
pip packages 
- selenium 2.47.3 
- pyvirtualdisplay 0.1.5 

python 2.7 
firefox 41.0 
lib32z-dev 1:1.2.8.dfsg-1ubuntu1 
python-lxml 3.3.3-1ubuntu0.1 
python-dev 2.7.5-5ubuntu3 
build-essential 11.6ubuntu6 

------------------------- 

::BAD BOX:: 
pip packages 
- selenium 2.53.6 
- pyvirtualdisplay 0.2 

python 2.7 
firefox-mozilla-build 47.0.1-0ubuntu1 (not sure why I need this, the other box doesn't seem to have it. But things break if I remove it) 
firefox 47.0.1 
python-dev 2.7.11-1 
libxml2-dev 2.9.3+dfsg1-1ubuntu0.1 
libxslt-dev (1.1.28-2.1) 
build-essential 12.1ubuntu2 

當我運行的「壞盒子」這個代碼,並沒有捕捉到的異常,我得到如下:

selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (464, 1). Other element would receive the click: <div class="container"></div> 
+0

異常明確指出,其他元素將獲得點擊的手段你的實際元素是由其他元素的div覆蓋..當你要找到元素的一些進度條仍然在覆蓋元素的頁面上時可能是可能的。所以你需要等待使用WebDriverWait,直到元素可點擊... :) –

+0

我應該在找到元素之前等待,還是在點擊之前等待? – Tyrick

+0

您應該在使用WebDriverWait ...找到元素期間等待:) :) –

回答

2

這可能是由於過小的窗口,目標元素最後隱藏在另一個之下。嘗試設置原始大小:

driver.set_window_size(1920, 1200) 

您也可以嘗試改變滾動的行爲,如果你的元素結束了頂部的橫幅下隱藏:

DesiredCapabilities.FIREFOX["elementScrollBehavior"] = 1 #scroll bottom instead of top 
driver = webdriver.Firefox() 
+0

尺寸沒有任何幫助,但滾動行爲修復了它! – Tyrick