2017-03-28 54 views
0

我是使用Selenium的新手,並且正在努力研究如何使用網站booking.com上的wait until方法來等待下拉選項在圖像中可見。 enter image description hereSelenium等到方法

這是我與工作代碼:

driver.get('http://booking.com') 
driver.find_element_by_css_selector('#ss').send_keys("London") 
WebDriverWait(driver,1).until('PLEASE SUGGEST WHAT TO INPUT') 
driver.find_element(By.XPATH, """//*[@id="frm"]/div[2]/div/div[1]/ul[1]/li[1]""").click() 

使用Chrome檢查器中,我看不到任何明確的選擇或元素在括號中使用的方法爲止。當我在可見的選項單擊鼠標右鍵,然後單擊「複製選擇」我剛剛得到這個:

#frm > div:nth-child(8) > div > div.c-autocomplete.sb-destination > ul.c-autocomplete__list.sb-autocomplete__list.-visible > li.c-autocomplete__item.sb-autocomplete__item.sb-autocomplete__item--city 

請某人建議什麼,我需要在這裏做。

回答

1

您可以嘗試等到下拉選項中的一個變成可點擊與ExpectedConditions

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

driver.find_element_by_css_selector('#ss').send_keys("London") 
WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH, '//li[@class="c-autocomplete__item sb-autocomplete__item sb-autocomplete__item--city sb-autocomplete__item--two-lines "]'))) 

請注意,您在WebDriverWait()傳遞第二個參數是超時(秒)和1秒可能是不夠的等待期望滿足

要選擇您可能使用的絕對一個更詳細的相對XPath代替的必需選項:

driver.find_element(By.XPATH, '//li//b[text()="Central London"]').click() 

這應該選擇帶有粗體文本「倫敦中心區」的選項。只要用適當的值替換"Central London"選擇其他選項

+0

我會把什麼樣的價值有一個相關的XPath,而不是絕對的,如果我想編寫代碼,以便點擊進入的任何城市的第一個選項? – Paulos

+1

''// li [@ class =「c-autocomplete__item sb-autocomplete__item sb-autocomplete__item - city sb-autocomplete__item - two-lines」]''是'XPath'匹配第一個選項 – Andersson

2

試試這個代碼:

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


driver = webdriver.Chrome() 
driver.maximize_window() 


driver.get('http://booking.com') 
driver.find_element_by_css_selector('#ss').send_keys("London") 
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".search_hl_name"))) 
driver.find_elements(By.XPATH, "//*[@class ='search_hl_name']")[1].click() // you can use relative xpath in place of absolute one, replace index value at [1] with 0-4 which ever you want to select 

正如安德森正確地提到你需要增加超時

+0

非常感謝。如何使用Chrome(或Firefox)中的inspector/web開發工具查找CSS-SELECTOR或XPATH?你怎麼知道它是絕對的還是相對的XPATH? – Paulos

+2

如果你用//開始xpath,並且只放入小值來定位元素,那麼它的相對xpath和絕對xpath就是以/ than/x/x/x /開始的,像這樣遍歷html。看到這個鏈接它會爲你提供一些信息。 http://www.guru99.com/xpath-selenium.html – thebadguy

+0

謝謝,順便說一下,我現在收藏了書籤。 – Paulos