我正在研究一个从网站提取一些数据的项目。在这个网站上有我应该填写的搜索表格。输入之一是文本,输入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:
答案 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)
得出WebDriverWait
和element_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()
浏览器快照: