【问题标题】:python selenium 4.8.0 -蟒蛇硒 4.8.0 -
【发布时间】:2023-02-06 01:33:42
【问题描述】:

所以我有一个登录脚本,我只是尝试在最新版本的 selenium (4.8.0) 上按类查找元素

代码:

button = browser.find_element(By.CLASS_NAME, 'just class name')

并且此代码不起作用。

我的东西:

  • firefox 驱动程序 - 0.32.1(2023-02-02,b7f075124503)
  • 硒 4.8.0

这是文档搜索元素的方式 - By.CLASS_NAMEBy.ID 等...

https://www.selenium.dev/documentation/webdriver/elements/finders/

尝试了代码的其他变体,如 find_element_by_ID 等,为 selenium 安装了一个额外的库(我不记得名字了)。

【问题讨论】:

  • 请至少提供您网站的相关 html 或 url。

标签: python selenium selenium-webdriver selenium4


【解决方案1】:

By.CLASS_NAME 只接受单个类名作为参数。所以你不能传递多个类名。


解决方案

您可以使用以下任一locator strategies

  • 使用类名只是:

    button = browser.find_element(By.CLASS_NAME, 'just')
    
  • 使用类名班级:

    button = browser.find_element(By.CLASS_NAME, 'class')
    
  • 使用类名姓名:

    button = browser.find_element(By.CLASS_NAME, 'name')
    

作为替代方案,您还可以使用 css_selector,如下所示:

button = browser.find_element(By.CSS_SELECTOR, ".just.class.name")

【讨论】:

    【解决方案2】:

    CSS 类和 ID 从不包含空格。您可以通过在浏览器控制台中键入以下内容来检查 DOM 中是否存在此类:

    document.querySelectorAll('.class_name')
    

    class_name 更改为您要查找的班级名称。如果元素有多个类,则每个类都以句点 (.) 为前缀。

    document.querySelectorAll('.class_name1.class_name2')
    

    【讨论】:

    • 浏览器控制台中document.querySelectorAll()的快捷方式是$$(),例如$$('.class_name')。它将为您节省一些打字时间。 $x() 将做同样的事情,但对于 XPath。
    • 此外,.querySelectorAll() 采用 CSS 选择器,因此空格表示后代,而不是类。每个类都必须以句点 (.) 为前缀。
    猜你喜欢
    • 2016-05-28
    • 2021-06-28
    • 2021-07-07
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多