【问题标题】:How to wait for a button to be clicked by user in Selenium web-driver using python?如何等待用户使用 python 在 Selenium web-driver 中单击按钮?
【发布时间】:2019-02-06 03:37:51
【问题描述】:

我有一个如下所示的登录表单。

用户名、密码、验证码和登录按钮的文本框从一开始就可点击和可见。 使用 Selenium,我可以提供用户名和密码的输入。 然后,我必须等待用户输入验证码,然后再次点击用户登录按钮。

点击 SIGN-IN 按钮后,webdriver 应该控制下一步。

因此,webdriver 应该等到单击 SIGN-IN 按钮(对于 user1,可能需要 2 秒才能输入 CAPTCHA,但对于 user2,可能需要 5 秒才能输入 CAPTCHA)。

这是登录按钮的 HTML。

<button _ngcontent-c4="" class="search_btn" type="submit">SIGN IN</button>

我在下面尝试过,但是,它不起作用。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("url")
btnSignIn = driver.find_element_by_xpath("//form/button[@type='submit' and @class='search_btn']")
WebDriverWait(driver, timeout=600).until(EC.staleness_of(btnSignIn))

我该怎么做? 提前致谢。

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver webdriver


    【解决方案1】:

    您可以实施以下解决方案:

    driver = webdriver.Chrome()
    driver.get("url")
    
    # Code for entering Username, Password
    ...
    # Wait until user enter Captcha
    input("Press ENTER after filling CAPTCHA")
    driver.find_element_by_xpath("//form/button[@type='submit' and @class='search_btn']").click()
    

    这应该允许等到用户按下 ENTER 键然后执行提交按钮点击

    如果您不希望用户与浏览器交互,而只使用控制台,您可以改进代码如下:

    driver = webdriver.Chrome()
    driver.get("url")
    
    # Code for entering Username, Password
    ...
    # Wait until user enter Captcha (in console) and press ENTER 
    captcha_input = driver.find_element_by_xpath('//input[@placeholder="Enter Captcha"]')
    captcha = input("Enter CAPTCHA and Press ENTER\n")
    captcha_input.send_keys(captcha)
    driver.find_element_by_xpath("//form/button[@type='submit' and @class='search_btn']").click()
    

    【讨论】:

      【解决方案2】:

      类似于安德森的回答,这对我不起作用,因为驱动程序抱怨它找不到元素(我的猜测是驱动程序是有状态的,所以在登录驱动程序后没有新页面的数据)

      driver = webdriver.Chrome()
      driver.get("url")
      
      # Code for entering Username, Password
      ...
      # Wait until user enter Captcha (in console) and press ENTER 
      input("Login manually and press ENTER\n")
      driver.get("logged in url") # cookies should keep you logged in
      driver.find_element_by_xpath("blah")
      

      但我发现对我有用的是添加一行来重新加载 url。这将重新加载站点,但由于 cookie 驱动程序现在已登录。如果他以前的回答没有,希望这会有所帮助:)

      【讨论】:

        【解决方案3】:

        你可以试试这个,

        WebDriverWait(driver, 10).until(EC.element_to_be_clickable(btnSignIn))
        

        【讨论】:

        • 如果按钮始终可点击,这将不起作用:/
        猜你喜欢
        • 2019-01-11
        • 1970-01-01
        • 1970-01-01
        • 2020-10-22
        • 1970-01-01
        • 2019-09-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-30
        相关资源
        最近更新 更多