【问题标题】:How to I click the button in selenium?如何单击硒中的按钮?
【发布时间】:2021-03-17 03:41:05
【问题描述】:

当我想 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>

【问题讨论】:

  • 这是我的错误:文件“hafezlearn.py”,第 33 行,在 login_use go_to_class= wait.until(EC.element_to_be_clickable((By.XPATH , ("//div[@class=' btn btn-palegreen enterClassBtn'")))) 文件“/usr/local/lib/python3.8/dist-packages/selenium/webdriver/support/wait.py”,第 80 行,直到引发 TimeoutException(消息,屏幕,堆栈跟踪)selenium.common.exceptions.TimeoutException:消息:

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

你已经够近了。 class 属性的值是 btn btn-palegreen enterClassBtn 但不是 btn btn- palegreen enterClassBtn 并且您不能在属性值中添加额外的空格。


解决方案

点击元素需要诱导WebDriverWaitelement_to_be_clickable(),可以使用以下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
    

【讨论】:

  • Tnx ??????
【解决方案2】:

css 值的多个类名很难处理。通常最简单的方法是使用 css 选择器:

button.btn.btn-palegreen.enterClassBtn

具体来说:

go_to_class = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR , ("button.btn.btn-palegreen.enterClassBtn"))))

另见How to get elements with multiple classes

【讨论】:

    猜你喜欢
    • 2023-01-11
    • 2021-12-08
    • 2021-08-12
    • 1970-01-01
    • 2016-05-29
    • 2020-04-15
    • 1970-01-01
    • 2018-11-02
    • 2023-03-05
    相关资源
    最近更新 更多