selenium.common.exceptions.NoSuchElementException:结果:没有这样的元素:无法使用Selenium ChromeDriver Chrome和Python定位元素

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (907)

我正在构建一个Web scraper,它从Web of Science中删除引用数据。星期五,我最终确定了该程序的一部分,但今天它已停止工作,当我尝试通过Selenium访问引文数据时,我得到一个NoSuchElementException。我尝试使用不同的方式(id,class,xpath,css选择器)单击这个特定元素,但它总是抛出错误。这是我的代码,它正在运行,现在不是:

url = 'https://apps.webofknowledge.com/Search.do?product=UA&SID=8F2pCcE8ApJDSKZLHfF&search_mode=GeneralSearch&prID=acd62bc2-0ee0-47a1-a85d-12009db3c2f5'
driver.get(url)
citers_num = driver.find_element_by_class_name('snowplow-citation-network-times-cited-count-link')
citers_num.click()

这是html:

<div class="search-results-data-cite">Times Cited: <a class="snowplow-    times-cited-link" title="View all of the articles that cite this one"     href="/CitingArticles.do     product=WOS&amp;SID=5FAYgZP1cYhuG9LGN3I&amp;search_mode=CitingArticles&amp;parentProduct=WOS&amp;parentQid=18&amp;parentDoc=12&amp;REFID=84460199&amp;excludeEventConfig=ExcludeIfFromNonInterProduct">313</a>

这是我今天遇到的错误:

citers_num = driver.find_element_by_class_name('snowplow-citation-network-all-times-cited')
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 564, in find_element_by_class_name
    return self.find_element(by=By.CLASS_NAME, value=name)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element
    'value': value})['value']
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/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":"class name","selector":"snowplow-citation-network-all-times-cited"}
  (Session info: chrome=75.0.3770.80)
  (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Mac OS X 10.14.1 x86_64)  

我知道这里还有其他类似的问题,但没有一个能够帮助我。谢谢!

提问于
用户回答回答于

有两个问题。当你在尝试click()你需要诱导WebDriverWaitelement_to_be_clickable(),你可以使用以下的定位策略

  • 使用CSS_SELECTORWebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.search-results-data-cite a[class*='times-cited-link'][href^='/CitingArticles']"))).click()
  • 使用XPATHWebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='search-results-data-cite']//a[@title='View all of the articles that cite this one' and starts-with(@href, '/CitingArticles')]"))).click()
  • 注意:您必须添加以下导入: from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC

下一个问题是您使用的二进制文件版本之间的不兼容性如下:

  • 您正在使用chromedriver = 74.0
  • chromedriver发布说明= 74.0明确提到以下内容:

支持Chrome v74

  • 你正在使用chrome = 75.0,它已经被最近的推送更新了。
  • ChromeDriver v75.0的发行说明明确提到以下内容:

支持Chrome v75

因此,ChromeDriver v74.0Chrome浏览器v75.0之间存在明显的不匹配,要解决此问题,您需要:

  • 保持铬V75和升级ChromeDriverChromeDriver V75水平。
  • 保留ChromeDriver v74并将Chrome降级到Chrome v74级别。
用户回答回答于

使用Webdriverwai 然后跟着xpath的步骤去点击

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//div[@class='search-results-data-cite'][contains(.,'Times Cited:')]/a"))).click()

或css跟着css的选择器。

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div.search-results-data-cite a"))).click()

在使用代码之前,请确保已导入上述导入。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励