我有一些selenium代码,使用以下代码将各种搜索字词输入网站的搜索字段:
browser = webdriver.Chrome()
browser.get(url)
search_box1 = browser.find_element_by_id('searchText-0')
search_box2 = browser.find_element_by_id('searchText-2-dateInput')
search_box1.send_keys("Foobars")
search_box1.send_keys("2013")
search_box1.submit()
然后我编写了更多的代码来获取给定搜索查询产生的匹配数。然而,对于" Foobars"的一些价值观。特别是几年,没有命中和查询结果在这样的页面:
<body class="search">
<div id="skip">...</div>
<div style = "display:non;">...</div>
<div id="container" class="js">
<div id="header">...</div>
<div id="search">...</div>
<div id="helpContent">...</div>
<div id="main-body" class="noBg">
<div class="error">
<div>Sorry. There are no articles that contain all the keywords you entered.</div>
<p>Possible reasons:
</p>
<ul></ul>
<p></p>
<p></p>
</div>
</div>
如何检查搜索查询是否为此而不是搜索查询中的点击时获得的页面?我打算实现一个if
语句来检查搜索查询是否返回了什么,但我似乎无法找到正确的语法来获取我需要执行此操作的错误元素。我尝试过这样的事情:
Error=browser.find_element_by_name('error')
或
Error=browser.find_element_by_xpath("//div[@class='error']")
但我一直收到错误:
selenium.common.exceptions.NoSuchElementException: Message: u'no such element\n
我想识别错误元素,以便我可以执行类似
的操作if Error == "There are no articles that contain all the keywords you entered":
do something
else:
do something else
甚至更好,会告诉我是否存在用于条件的错误。任何帮助将不胜感激。
答案 0 :(得分:1)
也许你太快了?尝试
from selenium.webdriver.support import expected_conditions as EC
....
Error= WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.XPATH, "//div[@class='error']")))
答案 1 :(得分:0)
我找到了一个似乎运作良好的解决方案。您需要导入selenium common exceptions模块,然后使用try / execept。在示例代码中,我导航到url
给出的页面,并将Foobars
和2013
输入到两个搜索字段中。然后,我正在恢复结果的命中数,该命中数存储在navBreadcrumb
。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
browser = webdriver.Chrome()
browser.get(url)
search_box1 = browser.find_element_by_id('searchText-0')
search_box2 = browser.find_element_by_id('searchText-2-dateInput')
search_box1.send_keys("Foobars")
search_box1.send_keys("2013")
search_box1.submit()
try:
Hits = browser.find_element_by_id('navBreadcrumb').text
Hits = int(Hits)
except NoSuchElementException:
Hits = int(0)
browser.quit()