【问题标题】:Selenium (Python) - NoSuchElementException: Message: no such element: Unable to locate elementSelenium (Python) - NoSuchElementException:消息:没有这样的元素:无法找到元素
【发布时间】:2022-02-08 18:31:24
【问题描述】:

我正在尝试制作一个简单的脚本,该脚本会转到 The Whiskey Exchange 的主页,单击以下菜单项,导航到新页面并最终截取屏幕截图。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

chrome_options = Options()

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.thewhiskyexchange.com/")
driver.implicitly_wait(3)

search_bar = driver.find_element(
    By.XPATH, "/html/body/div[3]/nav/div/div[3]/div/div/div[2]/a[2]")
search_bar.click()
driver.implicitly_wait(3)

driver.save_screenshot('./image.png')
driver.quit()

我尝试了多种方法来使其工作,主要是通过更改查找器的类型,但没有运气。我尝试过复制 XPATH 和 Full XPATH(直接从 chrome 复制),但这也没有奏效。也许这与网站的构建方式有关,但不知道。

我收到以下错误消息:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[3]/nav/div/div[3]/div/div/div[2]/a[2]"}

第一次使用 selenium,所以斗争有点真实。请帮忙。

【问题讨论】:

  • 我没有看到 xpath 的元素是您想要的主页搜索框的屏幕截图,导致弹出另一个元素。
  • 你指的是哪个元素 /html/body/div[3]/nav/div/div[3]/div/div/div[2]/a[2]
  • 是我在图中圈出来的菜单项。我从 Chrome 开发者工具中复制了完整的 xpath。

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

要展开 Scotch Whisky 菜单,您无需单击该项目,而是可以简单地使用以下任一方法 Mouse Hover 并获取 webpage 中的 screenshot Locator Strategies:

  • 使用CSS_SELECTOR

    driver.get('https://www.thewhiskyexchange.com/')
    ActionChains(driver).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a[title='Scotch Whisky']")))).perform()
    driver.save_screenshot('./Scotch_Whisky.png')
    driver.quit()
    
  • 使用XPATH

    driver.get('https://www.thewhiskyexchange.com/')
    ActionChains(driver).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[@title='Scotch Whisky']")))).perform()
    driver.save_screenshot('./Scotch_Whisky.png')
    driver.quit()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 截图:

【讨论】:

  • 谢谢!这个 sn-p 的代码让我非常接近,所以我只是添加了一个额外的步骤来在“Single Malt Whisky”子菜单项上执行一个点击命令,我得到了我想要的结果!
【解决方案2】:

CSS_SELECTOR

a.header-button.header-button--search.js-header-button--search

XPATH

//a[@title='Search']

你可以简单地使用这个 css 选择器,因为我没有看到这样的 xpath。

【讨论】:

  • 我已经尝试了 CSS Selector 方法,我害怕收到一条新的错误消息。 ElementNotInteractableException:消息:元素不可交互
  • 尝试使用 webdriver 等待元素可点击。
猜你喜欢
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多