硒等到方法

时间:2017-03-28 07:07:34

标签: python selenium selenium-webdriver web-scraping

我是使用Selenium的新手,我正在尝试使用网站booking.com上的等待方法,等待下拉选项在图片中可见。 enter image description here

这是我正在使用的代码:

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检查器,我无法在until方法的括号中看到任何清晰的选择器或元素。当我右键单击可见选项并单击“复制选择器”时,我得到这个:

#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

请有人建议我在这里需要做什么。

2 个答案:

答案 0 :(得分:2)

试试这段代码:

a=[{'name':'A','color':'1'},
   {'name':'B','color':'2'}]
b=[{'name':'A','color':'3'},
   {'name':'c','color':'1'}]

dic = {}
for i,item in enumerate(b):
    dic[item['name']] = i
# dic will be {'A':0,'c':1}
For item in a:
    if not item['name'] in dic:
        do this
    else:
        if b[dic[item['name']]]['color'] > item['color']:
            do that

正如Andersson正确提到的,你需要增加超时

答案 1 :(得分: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而不是绝对的:{/ p>

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

这应该选择带有粗体文字“ Central London ”的选项。只需将"Central London"替换为适当的值即可选择其他选项