2014-05-25 121 views
1

我想通過python中的selenium瀏覽facebook。 到目前爲止,這是我的腳本。Selenium -python元素不可點擊

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

usr = ""# I have put 3 different accounts and tested it. Same error 
pwd = "" 

driver = webdriver.Chrome('E:\python_libs\chromedriver.exe') 

driver.get("https://www.facebook.com") 

assert "Facebook" in driver.title 

elem = driver.find_element_by_id("email") 
elem.send_keys(usr) 
elem = driver.find_element_by_id("pass") 
elem.send_keys(pwd) 
elem.send_keys(Keys.RETURN) 



elem = driver.find_element_by_css_selector(".input.textInput") 
elem.send_keys("Posted using Python's Selenium WebDriver bindings!") 



elem = driver.find_element_by_css_selector(".selected") 

elem.click() 
time.sleep(5) 




driver.close() 

此腳本在獲得並正確安裝的chromedriver的Windows上運行時會返回錯誤。

Traceback (most recent call last): 
File "C:\Users\Home\Desktop\facebook_post.py", line 28, in <module> 
elem.click() 
File "C:\Python27\lib\site-packages\selenium-2.42.0-   py2.7.egg\selenium\webdriver\remote\webelement.py", line 60, in click 
self._execute(Command.CLICK_ELEMENT) 
File "C:\Python27\lib\site-packages\selenium-2.42.0- py2.7.egg\selenium\webdriver\remote\webelement.py", line 370, in _execute 
return self._parent.execute(command, params) 
File "C:\Python27\lib\site-packages\selenium-2.42.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 172, in execute 
self.error_handler.check_response(response) 
File "C:\Python27\lib\site-packages\selenium-2.42.0-py2.7.egg\selenium\webdriver\remote\errorhandler.py", line 164, in check_response 
raise exception_class(message, screen, stacktrace) 
WebDriverException: Message: u'unknown error: Element is not clickable at point (481,  185). Other element would receive the click: <input type="file" class="_n _5f0v" title="Choose a file to upload" accept="image/*" name="file" id="js_0">\n (Session info: chrome=35.0.1916.114)\n (Driver info: chromedriver=2.10.267521,platform=Windows NT 6.1  x86)' 

我無法使這個頭或尾巴。 任何幫助,將不勝感激。

Graph API在這裏是不可行的,因爲我想瀏覽自己而不是某些應用程序。 如果以自己的身份瀏覽可以通過圖形API或其他方式完成,請告訴。

+0

在Firefox中工作。但爲什麼它不適用於Chrome?我只是想知道這個錯誤的原因。 – theSage

回答

3

如果您多次執行此過程,Selenium會在WebDriverWait中選擇一些選項,以避免浪費太多時間並檢查元素是否可見。

Here是有關Walen in Selenium和 的文檔this是Selenium的Python文檔中關於預期條件類的一部分。看起來「可點擊」是您可以檢查的一個條件。

就我而言,我編寫了一個簡單的函數,負責關注可見性和點擊,並在每次需要點擊動態時調用它。

我的示例代碼:

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

Browser = webdriver.Chrome() 

def wait_until_visible_then_click(element): 
    element = WebDriverWait(Browser,5,poll_frequency=.2).until(
     EC.visibility_of(element)) 
    element.click() 

編輯:

上面的鏈接似乎被削弱。 This是等待的新文檔,here是預期的條件文檔。

+0

NameError:未定義全局名稱「瀏覽器」 – oxidworks