Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 硒等待法_Python_Selenium_Selenium Webdriver_Web Scraping - Fatal编程技术网

Python 硒等待法

Python 硒等待法,python,selenium,selenium-webdriver,web-scraping,Python,Selenium,Selenium Webdriver,Web Scraping,我对使用Selenium还不熟悉,我正在努力研究如何使用网站booking.com上的wait-until方法,以等待下拉选项如图所示可见。 这是我正在使用的代码: 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.f

我对使用Selenium还不熟悉,我正在努力研究如何使用网站booking.com上的wait-until方法,以等待下拉选项如图所示可见。

这是我正在使用的代码:

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 inspector,我看不到要在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

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

您可以尝试等待,直到其中一个下拉选项可以通过以下方式单击:

请注意,您在
WebDriverWait()
中传递的第二个参数是超时(以秒为单位),并且
1
秒可能不足以等待满足预期

要选择所需选项,可以使用更详细的相对
XPath
,而不是绝对选项:

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

应选择带有粗体文本“伦敦市中心””的选项。只需用适当的值替换
“Central London”
,以选择另一个选项

您可以尝试等待,直到其中一个下拉选项变为可单击:

请注意,您在
WebDriverWait()
中传递的第二个参数是超时(以秒为单位),并且
1
秒可能不足以等待满足预期

要选择所需选项,可以使用更详细的相对
XPath
,而不是绝对选项:

driver.find_element(By.XPATH, '//li//b[text()="Central London"]').click()
应选择带有粗体文本“伦敦市中心””的选项。只需用适当的值替换
“Central London”
,以选择另一个选项

尝试以下代码:

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
正如Andersson正确提到的,您需要增加超时时间,请尝试以下代码:

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

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

,非常感谢。如何在Chrome(或Firefox)中使用inspector/web开发工具查找CSS-SELECTOR或XPATH?您如何知道它是绝对的还是相对的XPATH?如果您以//开始XPATH,并且只将小的值放在元素的位置,那么它的相对XPATH和绝对XPATH将以/than/x/x/x/之类的东西开始,它们遍历html。查看此链接,它将为您提供一些信息。谢谢,顺便说一句,这是一篇很棒的文章,我现在已经把它书签了。现在我在点击日期时遇到了麻烦。假设我想单击我尝试过的今天日期:driver.find_元素(By.XPATH,//td[@class=“c2 day c2-day-s-today”])。单击()但它没有任何作用。如何查找此文件的XPath?(“//span[@c2-day-inner”和text()='29']”[1]根据查看的第一个月或第二个月,使用要选择的日期和[0]或[1]更改此值29。希望这能帮上忙那太好了,谢谢。如何在Chrome(或Firefox)中使用inspector/web开发工具查找CSS-SELECTOR或XPATH?您如何知道它是绝对的还是相对的XPATH?如果您以//开始XPATH,并且只将小的值放在元素的位置,那么它的相对XPATH和绝对XPATH将以/than/x/x/x/之类的东西开始,它们遍历html。查看此链接,它将为您提供一些信息。谢谢,顺便说一句,这是一篇很棒的文章,我现在已经把它书签了。现在我在点击日期时遇到了麻烦。假设我想单击我尝试过的今天日期:driver.find_元素(By.XPATH,//td[@class=“c2 day c2-day-s-today”])。单击()但它没有任何作用。如何查找此文件的XPath?(“//span[@c2-day-inner”和text()='29']”[1]根据查看的第一个月或第二个月,使用要选择的日期和[0]或[1]更改此值29。希望此帮助如果我想编写代码,以便它可以单击输入的任何城市的第一个选项,那么我会将哪个值设置为相对XPath而不是绝对XPath?
//li[@class=“c-autocomplete\uuuu item sb-autocomplete\uu item sb-autocomplete\uuu item--city sb-autocomplete\uu item--两行”]“
XPath
以匹配第一个选项如果我想编写代码,以便它可以单击输入的任何城市的第一个选项,我会将什么值设置为相对XPath而不是绝对XPath?”=“c-autocomplete\uuuu item sb-autocomplete\uuuu item sb-autocomplete\uuuuu item--city sb-autocomplete\uuuu item--two line”]”is
XPath
匹配第一个选项