2013-11-29 2 views
1

У меня есть селен код для ввода различных условий поиска в поле поиска веб-сайта, используя следующий код:Поиск элементов Ошибка в Selenium После .submit() с помощью Python

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

Я нашел решение, которое работает очень хорошо. Вам нужно импортировать общий модуль исключения selenium, а затем использовать 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() 
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']"))) 
Смежные вопросы