Python Selenium Webdriver超时异常

时间:2019-09-26 16:17:18

标签: python selenium selenium-webdriver

我正在研究一个从网站提取一些数据的项目。在这个网站上有我应该填写的搜索表格。输入之一是文本,输入2或3个字符后会显示建议,我应该选择该选项以前进,否则将激活搜索按钮。问题是当我使用以下代码时:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='LocationSuggestionBox']/ul/div/li/div"))).click()

我在上面的代码中修改了xpath。实际的xpath如下所示:

//*[@id="LocationSuggestionBox""]/ul/div/li/div

但是我不知道如何在代码中添加它,以免出现语法错误。

使用我的工作代码的最终结果是:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='LocationSuggestionBox']/ul/div/li/div"))).click()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/support/wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

2 个答案:

答案 0 :(得分:2)

当我针对该页面运行时,您的XPath返回NULL,因此此处的选择器不正确。

根据您提供的页面信息,这是一个正确的选择器:

"//li[div/span[text()='" + locationNameHere + "']]"

因此您可以将代码更改为:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li[div/span[text()='" + locationNameHere + "']]"))).click()

如果您只想单击第一个位置建议,则可以使用以下方法:

//li[div/span]

但是此XPath将为您提供所有可见位置建议的列表。

答案 1 :(得分:1)

得出WebDriverWaitelement_to_be_clickable()并遵循xpath。

driver.get('https://locatr.cloudapps.cisco.com/WWChannels/LOCATR/openBasicSearch.do;jsessionid=8CDF9284D014CFF911CB8E6F81812619')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='searchLocationInput']"))).send_keys('China')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li[@class='ng-scope']//span[text()='CHINA']"))).click()

浏览器快照:

enter image description here