我正在使用硒在python 2.7中开发一个刮刀。我面临的主要问题是我的程序在没有找到这样的元素异常之后立即终止。我尝试了几种解决方案,但没有任何效果。喜欢使用try catch等,这里是我尝试过的代码。
def check_exists_by_xpath(xpath):
try:
webdriver.find_element_by_xpath(xpath)
except NoSuchElementException:
return False
return True
即使元素不存在,我希望程序恢复。任何人都可以提出解决方案如何做到这一点?我尝试了很多其他的东西,但没有任何作用。
错误信息:
Traceback (most recent call last):
File "bot2.py", line 22, in <module>
driver.find_element_by_xpath(xpath)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 295, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 756, in find_element
'value': value})['value']
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 238, in execute
self.error_handler.check_response(response)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 193, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="react-root"]/section/usama"}
(Session info: chrome=59.0.3071.115)
(Driver info: chromedriver=2.28.455520 (cc17746adff54984afff480136733114c6b3704b),platform=Windows NT 10.0.14393 x86_64)
尽可能避免使用try ... catch
结构。
使用更方便的方法:
def check_exists_by_xpath(xpath):
elnts = driver.find_elements_by_xpath(xpath)
return len(elnts) > 0
请注意使用find_elements_by_xpath
而不是find_element_by_xpath
,它返回与XPath表达式对应的元素列表。如果未找到任何元素,则列表为空。