如果未找到元素,则毫无例外地检查元素

问题描述 投票:0回答:3

我正在尝试探测页面是否存在特定元素,因为它会改变我的流程中的条件。我使用

.find_element_by_xpath
来查找该元素,它工作正常,但如果在没有该元素的页面上执行该搜索,我会收到异常并停止进程。

我是硒的新手,查看了文档,但我只是找不到我要找的东西。

任何指导表示赞赏。

我的经理:

try:
    browser.find_element_by_xpath('//*[@id="message"]')
except NoSuchElementException as e:
    print('No Such Element has occurred')
    pass

这是痕迹:

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.3\helpers\pydev\pydev_run_in_console.py", line 53, in run_file
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.3\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/DWL/Desktop/comment_bot/comment_bot.py", line 187, in <module>
    advertise()
  File "C:/Users/DWL/Desktop/comment_bot/comment_bot.py", line 102, in advertise
    advert = [popper(adv_vc, add_vc, ad_comment) for x in range(len(adv_vc))]
  File "C:/Users/DWL/Desktop/comment_bot/comment_bot.py", line 102, in <listcomp>
    advert = [popper(adv_vc, add_vc, ad_comment) for x in range(len(adv_vc))]
  File "C:/Users/DWL/Desktop/comment_bot/comment_bot.py", line 120, in popper
    post_comment(a[0][0])
  File "C:/Users/DWL/Desktop/comment_bot/comment_bot.py", line 158, in post_comment
    browser.find_element_by_xpath('//*[@class="style-scope ytd-message-renderer"]')
  File "C:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 385, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "C:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 955, in find_element
    'value': value})['value']
  File "C:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "C:\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@class="style-scope ytd-message-renderer"]"}
  (Session info: chrome=64.0.3282.186)
  (Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 10.0.16299 x86_64)
python selenium python-3.6
3个回答
6
投票

您可以使用 try- except 块来忽略异常,如下所示:

from selenium.common.exceptions import NoSuchElementException

try:
    driver.find_element_by_xpath(...)
except NoSuchElementException:
    print("Element not found")

4
投票

根据堆栈跟踪,引发错误的行是您要查找的位置

xpath
//*[@class="style-scope ytd-message-renderer"]
,而不是
try except
块内的代码。

另一种选择是使用

find_elements
并检查大小是否不为 0

elements = browser.find_elements_by_xpath('//*[@class="style-scope ytd-message-renderer"]')
if len(elements) > 0:
    # do something

0
投票

好吧,我的解决方案比其他人所说的更穴居人,但我确实认为它可以为许多人解决这个问题。对我来说,错误的出现取决于 IDE。所以基本上我在使用微软的Visual studio代码时遇到了这个问题(即使我导入了异常库!),然后我检查了一下,似乎你必须在VS代码中打开一个包含项目的文件夹,并且需要禁用断点。 这里有更好的解释: 如果未找到元素,则毫无例外地检查元素

© www.soinside.com 2019 - 2024. All rights reserved.