2017-08-21 38 views
0

我是新來的Python和硒,我只是遇到了一個問題。 我試圖製作一個腳本,它會自動點擊Facebook頁面的LIKE按鈕(在彈出窗口中)。Python中硒的Ubuntu:WebDriverWait會找不到元素

編輯 - 本地主機網頁代碼:

<html> 
<head> 
<title>Link to Facebook Page</title> 
<link rel="stylesheet" type="text/css" href="default.css"> 
</head> 
<body> 
<center> 
<div id="fb_like"> 
<a href="https://m.facebook.com/AdagioTV" target="_blank"><img src="fblogo.png"></a> 
</div> 
</center> 
</body> 
</html> 

我有以下代碼:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
import time 

webpage = r"http://localhost/like/" # local web 

driver = webdriver.Firefox() 
driver.get(webpage) 

sbox = driver.find_element_by_class_name("fb_like") 
sbox.click() 

print "opened fb popup" 

現在,頁面打開我們的Facebook頁面的移動版本(IN彈出式),這是類似的:https://m.facebook.com/AdagioTV

我有以下代碼爲了等待頁面加載並單擊類似按鈕:

time.sleep(5) 
print "slept 5 seconds" # page loading time 
WebDriverWait(driver, delay).until(EC.presence_of_all_elements_located((By.ID, 'action_bar'))) 
likebutt = driver.find_element_by_link_text('Like') 
likebutt.click() 

但是,這不會找到元素,既不像或action_bar,它會永遠睡覺。我在這裏做錯了什麼? 謝謝!

+0

也許彈出的是一個'iframe',你需要切換到該幀,然後點擊喜歡 – Stack

+0

感謝您的非常快的答覆。你能指點我一個鏈接,我可以閱讀我怎麼能做到這一點? – unkn0wnx

+0

_「我在做什麼錯在這裏?」 _ - 您嘗試使用自動化工具在Facebook上和內容,這是對他們的服務條款擺在首位互動... – CBroe

回答

1

嘗試:

String parentWindowHandler = driver.getWindowHandle(); //parent window 
String subWindowHandler = null; 

Set<String> handles = driver.getWindowHandles(); 
Iterator<String> iterator = handles.iterator(); 
while (iterator.hasNext()){ 
    subWindowHandler = iterator.next(); 
} 
driver.switchTo().window(subWindowHandler); // switch to popup window 

time.sleep(5) 
WebDriverWait(driver, delay).until(EC.presence_of_all_elements_located((By.ID, 'action_bar'))) 
likebutt = driver.find_element_by_link_text('Like') 
likebutt.click() 

的,如果它不工作,嘗試等待,在彈出的(更容易的)另一個元素定位的方式,它可能是錯誤的定位問題:我沒有看到「操作欄「在你的網頁代碼中。

+0

非常感謝!你的代碼是不同的,但你給了我一個好主意,關於使用Window Handles。 ,我發現「driverfb.switch_to.window(driverfb.window_handles [1])」再次大量做工作,謝謝!您的代碼是真的很有幫助。順便說一句,你的代碼是java嗎?我正在使用python。 – unkn0wnx

+0

是的,java。我只是想表現出與我的測試非常相同的解決方法。不管怎樣,歡迎您。 –

+0

ru在py上發佈您的答案? –