我正在使用Selenium在python 2.7中开发一个抓取器。我面临的主要问题是我的程序在没有发现此类元素异常后立即终止。 我已经尝试了向我建议的几种解决方案,但没有任何效果。比如使用尝试捕捉等。 这是我尝试过的代码。
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:Python27libsite-packagesseleniumwebdriverremotewebdriver.py", line 295, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:Python27libsite-packagesseleniumwebdriverremotewebdriver.py", line 756, in find_element
'value': value})['value']
File "C:Python27libsite-packagesseleniumwebdriverremotewebdriver.py", line 238, in execute
self.error_handler.check_response(response)
File "C:Python27libsite-packagesseleniumwebdriverremoteerrorhandler.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 表达式对应的元素列表。如果未找到元素,则列表为空。