我是使用Selenium的新手,我正在尝试使用网站booking.com上的等待方法,等待下拉选项在图片中可见。
这是我正在使用的代码:
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
请有人建议我在这里需要做什么。
答案 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"
替换为适当的值即可选择其他选项