【问题标题】:Click a button on a website using selenium使用 selenium 单击网站上的按钮
【发布时间】:2020-07-24 03:00:00
【问题描述】:

我正在尝试使用 selenium 单击网站上的按钮。 这是html:

<form action="/login/" id="login" method="post" class="form-full-width">
   <input data-testid="loginFormSubmit" type="submit" class="btn btn-success btn-large" value="Log in" 
   tabindex="3">
</form>

这是我的一些代码:

if __name__ == "__main__":
    driver = webdriver.Chrome()
    wait = WebDriverWait(driver, 100)
    driver.get ('https://www.url.com/login/')
    driver.find_element_by_name('username').send_keys('username')
    driver.find_element_by_name('password').send_keys('password')
    driver.find_elements_by_xpath("//input[@value='Log in' and @type='submit']")

我也试过了:

driver.find_element_by_value('log in').click()
driver.find_element_by_xpath("//a[@href='https://www.url.com/home/']").click()

但是当我运行它时,它总是会出现以下错误消息:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//a[@href='https://www.url.com/home/']"}

我是 selenium 和 web 驱动程序的新手,因此我们将不胜感激。

【问题讨论】:

  • 在登录中尝试大写 L。元素是“登录”,而您正在寻找“登录”,所以 Selenium 找不到。 Python 区分大小写。
  • 不,抱歉,这只是我的问题中的一个错误。虽然仍然不起作用 - 仍然会出现错误消息
  • xpath 不正确。 find_elements 返回元素列表。如果您只针对一个元素,则必须使用 find_element 方法。您可以尝试以下 xpath - //input[@data-testid="loginFormSubmit"]

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

要单击元素,您必须为element_to_be_clickable() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[data-testid='loginFormSubmit'][value='Log in']"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@data-testid='loginFormSubmit' and @value='Log in']"))).click()
    
  • 注意:您必须添加以下导入:

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

参考文献

您可以在NoSuchElementException 上找到一些相关讨论:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 2021-04-08
    • 2021-08-02
    • 2016-09-20
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多