簡體   English   中英

如何單擊 selenium 中的按鈕?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM