嗨,我是使用硒的新手,并且正在为我的工作自动化某个流程。我已经能够成功填写表格并单击几个按钮,但是在验证我的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")
也给我同样的错误信息。
答案 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()