在.seubmit()之后使用Python搜索Selenium中的错误元素

时间:2013-11-29 09:23:19

标签: python python-2.7 selenium

我有一些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

甚至更好,会告诉我是否存在用于条件的错误。任何帮助将不胜感激。

2 个答案:

答案 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给出的页面,并将Foobars2013输入到两个搜索字段中。然后,我正在恢复结果的命中数,该命中数存储在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()