簡體   English   中英

如何使用python在Selenium Web驅動程序中等待用戶單擊按鈕?

[英]How to wait for a button to be clicked by user in Selenium web-driver using python?

我有一個如下所示的登錄表單。

在此處輸入圖片說明

用戶名、密碼、驗證碼和登錄按鈕的文本框從一開始就可點擊和可見 使用 Selenium 我可以提供用戶名和密碼的輸入。 然后,我必須等待用戶輸入驗證碼,然后再次單擊用戶登錄按鈕。

單擊登錄按鈕后,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))

我怎樣才能做到這一點 ? 提前致謝。

您可以實施以下解決方案:

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()

類似於 Andersson 的回答,這對我不起作用,因為驅動程序抱怨它找不到元素(我的猜測是驅動程序是有狀態的,因此登錄驅動程序后沒有新頁面的數據)

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,驅動程序現在已登錄。如果他之前的回答沒有,希望這會有所幫助:)

你可以試試這個

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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