[英]How to I click the button in selenium?
當我想 selenium 點擊這個代碼按鈕時,selenium 給我寫這個錯誤
這是我的代碼:
#LOGIN IN WEBSITE
browser = webdriver.Firefox()
browser.get("http://class.apphafez.ir/")
username_input = browser.find_element_by_css_selector("input[name='UserName']")
password_input = browser.find_element_by_css_selector("input[name='Password']")
username_input.send_keys(username_entry.get())
password_input.send_keys(password_entry.get())
button_go = browser.find_element_by_xpath("//button[@type='submit']")
button_go.click()
#GO CLASS
wait = WebDriverWait(browser , 10)
go_to_class = wait.until(EC.element_to_be_clickable((By.XPATH , ("//div[@class='btn btn- palegreen enterClassBtn'"))))
go_to_class.click()
這是網站代碼:
<div class="databox-row padding-10">
<button data-bind="attr: { 'data-weekscheduleId' : Id}" style="width:100%" class="btn btn-palegreen enterClassBtn" data-weekscheduleid="320">"i want to ckick here"</button>
這是我的程序錯誤:
File "hafezlearn.py", line 33, in login_use
go_to_class = wait.until(EC.element_to_be_clickable((By.XPATH , ("//div[@class='btn btn- palegreen enterClassBtn'"))))
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/support/wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
</div>
你離得夠近了。 class屬性的值是btn btn-palegreen enterClassBtn
但不是btn btn- palegreen enterClassBtn
並且您不能在屬性值中添加額外的空格。
要單擊元素,您需要為element_to_be_clickable()
誘導WebDriverWait ,您可以使用以下任一Locator Strategies :
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn.btn-palegreen.enterClassBtn[data-bind*='data-weekscheduleId']"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn btn-palegreen enterClassBtn' and text()='i want to ckick here'][contains(@data-bind, 'data-weekscheduleId')]"))).click()
注意:您必須添加以下導入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
css 值的多個 class 名稱很難處理。 通常最簡單的方法是使用 css 選擇器:
button.btn.btn-palegreen.enterClassBtn
具體來說:
go_to_class = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR , ("button.btn.btn-palegreen.enterClassBtn"))))
另請參閱如何獲取具有多個類的元素
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.