Selenium 在错误中按\u类\u名称查找\u元素\u

Selenium 在错误中按\u类\u名称查找\u元素\u,selenium,selenium-webdriver,Selenium,Selenium Webdriver,我尝试使用selenium自动单击按钮,但它给了我错误。页面的html代码为: 我正在尝试的代码是: create_team=driver.find_element_by_class_name('ts-btn ts-btn-fluent ts-btn-fluent-secondary ts-btn-fluent-with-icon join-team-button') create_team.click() 我得到以下错误: 驱动程序。通过类名称()查找元素()只接受一个类名,它不是为处理多

我尝试使用selenium自动单击按钮,但它给了我错误。页面的html代码为:

我正在尝试的代码是:

create_team=driver.find_element_by_class_name('ts-btn ts-btn-fluent ts-btn-fluent-secondary ts-btn-fluent-with-icon join-team-button')
create_team.click()
我得到以下错误:


驱动程序。通过类名称()查找元素()
只接受一个类名,它不是为处理多个类名而构建的,引用-(),这似乎有争议

使用
driver。通过css\u选择器(“ts-btn.ts-btn fluent.ts-btn fluent secondary.ts-btn fluent with icon.join team button”)查找元素。

使用
driver.find_element_by_css_selector
您可以在选择器中的每个类名之间使用点(.)将多个类名链接在一起

create_team=driver.find_element_by_class_name('ts-btn.ts-btn-fluent.ts-btn-fluent-secondary ts-btn-fluent-with-icon.join-team-button')
create_team.click()
您必须用替换空间。as空格表示多个类

您还可以使用xpath或css:

create_team=driver.find_element_by_xpath("//*[@class='ts-btn.ts-btn-fluent.ts-btn-fluent-secondary ts-btn-fluent-with-icon.join-team-button]')
create_team.click()


create_team=driver.find_element_by_css_selector("[class='ts-btn.ts-btn-fluent.ts-btn-fluent-secondary ts-btn-fluent-with-icon.join-team-button]')
create_team.click()
更多问题需要回答

如果您从by_类_名称中检查异常:

你可以看到它在引擎盖下使用css_类定位器(你可以看到它自动添加到前台)

工作示例:

from selenium import webdriver

import time

from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://stackoverflow.com/questions/65579491/find-element-by-class-name-in-selenium-giving-error/65579606?noredirect=1#comment115946541_65579606")
time.sleep(5)
elem = driver.find_element_by_class_name('overflow-x-auto.ml-auto.-secondary.grid.ai-center.list-reset.h100')

print(elem.get_attribute("outerHTML"))

要单击图元,可以使用以下任一选项:

  • 使用
    css\u选择器

    driver.find_element_by_css_selector("button.ts-btn.ts-btn-fluent.ts-btn-fluent-secondary.ts-btn-fluent-with-icon.join-team-button[data-tid='tg-discover-team']").click()
    
  • 使用
    xpath

    driver.find_element_by_xpath("//button[@class='ts-btn ts-btn-fluent ts-btn-fluent-secondary ts-btn-fluent-with-icon join-team-button' and @data-tid='tg-discover-team']").click()
    

由于所需的元素是一个元素,理想情况下,单击您需要归纳的元素,使
元素成为可点击的()
,您可以使用以下任一选项:

  • 使用
    CSS\u选择器

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.ts-btn.ts-btn-fluent.ts-btn-fluent-secondary.ts-btn-fluent-with-icon.join-team-button[data-tid='tg-discover-team']"))).click()
    
  • 使用
    XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='ts-btn ts-btn-fluent ts-btn-fluent-secondary ts-btn-fluent-with-icon join-team-button' and @data-tid='tg-discover-team']"))).click()
    
  • 注意:您必须添加以下导入:

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

是否有其他可能找到按钮的方法?您是否可以尝试上述答案?这是一个不正确的说法,您可以使用class_name找到多个类哦?我在文档中没有看到任何东西说您可以在该特定方法中使用多个类名,使用CssSelector是搜索多个类名的正确方法。JUSY不必用“.”替换空格。@PDHide如果您查看这篇文章,可以接受
find\u element\u by\u class\u name()
只接受一个类名-()@PDHide我查过的每一篇文章都说,这种方法不适用于多个。(), ()