硒按类别名称单击按钮

时间:2020-07-27 18:08:26

标签: python selenium

嗨,我是使用硒的新手,并且正在为我的工作自动化某个流程。我已经能够成功填写表格并单击几个按钮,但是在验证我的MFA时,用于验证的按钮不起作用。

按钮的HTML:

<button class = "btn blue trustdevice trustbtn" onclick="updateTrustDevice(true)"> 
<span class ="loadwithbtn" style="display: none;"></span> 
<span class "waittext">Trust</span> 
</button>

我的代码:

browser.find_element_by_class_name("btn blue trustdevice trustbtn").click() 

我收到此错误 selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素: 无法找到元素:{“方法”:“ css选择器”,“选择器”:“。btn蓝色 trustdevice trustbtn“}

我也尝试过

elements = browser.find_element_by_class_name("btn blue trustdevice trustbtn")
for e in elements:
e.click()

,但收到相同的错误。请让我知道是否需要更多信息!

编辑:

button = browser.find_element_by_class_name("btn blue trustdevice trustbtn")

也给我同样的错误信息。

2 个答案:

答案 0 :(得分:3)

find_element_by_class_name()仅接受单个类名。而是使用css selector.

得出WebDriverWait()并等待element_to_be_clickable()

您可以使用任何一种定位器。

Css选择器:

WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,".btn.blue.trustdevice.trustbtn"))).click()

OR

Xpath:

WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.XPATH,"//button[./span[text()='Trust']]"))).click()

您需要导入以下库。

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

答案 1 :(得分:0)

这是一个常见的问题,人们往往会忘记,必须在单击之间添加一些time.sleep()才能加载页面。所以我建议添加:

import time

# action

time.sleep(5) #wait 5 seconds

# next action

您还可以使用硒waits

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

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()