【问题标题】:What is the correct way to correctly identify an object via Python and Selenium?通过 Python 和 Selenium 正确识别对象的正确方法是什么?
【发布时间】:2022-08-16 22:34:50
【问题描述】:

我目前正在与 Selenium 结合使用 Python。我无法再进一步。

附上你可以看到三个截图。在https://www.easycredit.de,我已经点击了按钮 (1)。之后我进入下一页。我现在想点击这个按钮 (2)。在屏幕截图 3 中,您可以看到源代码中的位置。

# link to Chromedriver
browser = webdriver.Chrome(\'/usr/local/bin/chromedriver\')

button = browser.find_element(By.CLASS_NAME, \'econ-button btn  btn-primary\')
button.click()

错误:

NoSuchElementException: no such element: Unable to locate element: {\"method\":\"css selector\",\"selector\":\".econ-button btn  btn-primary\"}
  (Session info: chrome=104.0.5112.79)

以下是我的问题:

  1. 为什么不能使用此代码?
  2. 在这种情况下,您如何确定哪种程序最有效?
  3. 如何选择是否通过 XPATH、ID 等来识别元素?

    谢谢

    标签: python selenium xpath css-selectors


    【解决方案1】:

    econ-button btn btn-primary 实际上是 3 个类名。
    By.CLASS_NAME 仅获取单个类名参数。
    要使用包含多个类名的定位器,您可以使用By.XPATHBy.CSS_SELECTOR
    对我来说,上述两种方法都很好,每种方法都有一些缺点和优点。
    所以,在这里你可以使用

    browser.find_element(By.CSS_SELECTOR, 'button.econ-button.btn.btn-primary')
    

    或者

    browser.find_element(By.XPATH, "//button[@class='econ-button btn  btn-primary']")
    

    一般可以使用By.CSS_SELECTORBy.XPATH。无需使用By.IDBy.CLASS_NAME,因为它们实际上在内部立即被翻译为By.CSS_SELECTORBy.XPATH :)
    有些人更喜欢使用By.CSS_SELECTOR,而另一些人更喜欢By.XPATH
    正如我之前提到的,上述两种方法中的每一种都有优缺点。
    例如,您可以仅使用 XPath 通过文本来定位元素。 XPath 支持根据子节点定位父元素。
    另一方面,XPath 在 Firefox 驱动程序上运行不佳,而在 Chrome 驱动程序等上运行良好。

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 2017-04-17
      相关资源
      最近更新 更多