Pro*_*ner 6 python selenium click button selenium-webdriver
内容:
confirm()对话框,询问用户“您是否要提交数据”我的意图:
我的脚本将一直等到用户单击按钮。一旦检测到用户单击了按钮,我的脚本将获取一个元素的值,然后(以某种方式)在对话框上单击“ 确定”。
题:
如何等待用户单击按钮?
附加条款:
使用:chromedriver,Python 2.7
按钮: <input id="submitID" type="button" class="medium" value="Submit filled Data">
[编辑]一些代码片段:
对话框弹出是javascript弹出窗口:
if (window.confirm("Are you sure you want to submit the data?")) {
this.SaveData();
}
Run Code Online (Sandbox Code Playgroud)
我的代码(对此问题进行了简化和修改):
from selenium import webdriver
from selenium.common.exceptions import WebDriverException
PATH_TO_CHROMEDRIVER = 'path/to/chromedriver'
URL = 'https://website-asking-user-to-fill-in-stuff.com'
driver = webdriver.Chrome(PATH_TO_CHROMEDRIVER)
driver.get(URL)
while True:
# loop until user close the chrome.
# If anyone has any better idea to
# WAIT TILL USER CLOSE THE WEBDRIVER, PLEASE SHARE IT HERE
try:
# --- main part of the code ---
waitForUserToClickButton() # this is what I need help with
driver.find_element_by_id('elementID').text
confirmJavascriptPopup() # this is also what I need help with
except WebDriverException:
print 'User closed the browser'
exit()
Run Code Online (Sandbox Code Playgroud)
问:如何等待用户点击按钮?
在这种情况下,你可以在selenium中引入显式WebDriverWait等待。
您可以尝试使用以下代码:
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'submitID')))
Run Code Online (Sandbox Code Playgroud)
问:如何单击对话框中的“确定”?
在这种情况下,您首先必须将网络驱动程序的焦点切换到警报,然后才能单击它。
alert = browser.switch_to.alert
alert.accept()
print("alert accepted")
Run Code Online (Sandbox Code Playgroud)
更新1:
当您执行单击操作时,会弹出一个警报。您可以使用以下代码从警报中提取文本:
alert = browser.switch_to.alert
msg_from_alert = alert.text
alert.accept()
Run Code Online (Sandbox Code Playgroud)
现在您只需将其与您已知的预期消息进行匹配即可。
expected_msg = "some msg from alert"
from collections import Counter
Counter(msg_from_alert) == Counter(expected_msg)
True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1515 次 |
| 最近记录: |