使用 Python 和 Selenium 处理警报
Handle Alert with Python and Selenium
我正在尝试使用 send_keys
元素方法和 Selenium 在此警报上编写登录凭据:
Login Alert
我在单击新 window 中的按钮后收到此警报,但我无法检查此 window 上的元素。
这是我的代码
import time
import pynput
from selenium import webdriver
driver=webdriver.Chrome("C:/Users/dhias/OneDrive/Bureau/stgg/chromedriver.exe")
driver.get("http://10.15.44.177/control/userimage.html")
time.sleep(3)
window_before = driver.window_handles[0]
driver.maximize_window()
btn=driver.find_element_by_name("TheFormButton3")
btn.click()
window_after = driver.window_handles[1]
driver.switch_to.window(window_after)
obj = driver.switch_to.alert
time.sleep(2)
obj.send_keys('Admin')
time.sleep(2)
我收到此错误,告诉我没有警报
我无法访问该页面,所以我无法尝试我的代码,但是,首先我通过添加 WebdriverWait
和新的 By.
函数对其进行了优化:
from selenium import webdriver as wd
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = wd.Chrome("C:/Users/dhias/OneDrive/Bureau/stgg/chromedriver.exe")
wait = WebDriverWait(driver, 15)
driver.get("http://10.15.44.177/control/userimage.html")
driver.maximize_window()
window_before = driver.window_handles[0]
wait.until(EC.element_to_be_clickable((By.NAME, "TheFormButton3"))).click()
driver.switch_to.window(driver.window_handles[1])
alert = driver.switch_to.alert
alert.send_keys('Admin\npassword\n') # \n works as an ENTER key
您可以尝试使用此代码查看警报是否真的存在或者是网页的一个元素:
from selenium.common.exceptions import NoSuchElementException
def is_alert_present(self):
try:
self.driver.switch_to_alert().send_keys('Admin\npassword\n') # \n works as an ENTER key
print('Sucess')
except NoSuchElementException:
print('No Alert Present')
另见 Alerts in the Selenium Documentation
也试试:
parent_h = browser.current_window_handle
# click on the link that opens a new window
handles = browser.window_handles # before the pop-up window closes
handles.remove(parent_h)
browser.switch_to_window(handles.pop())
# do stuff in the popup
# popup window closes
browser.switch_to_window(parent_h)
# and you're back
所以我终于找到了一个解决方案..我使用了你必须在 URL 请求中发送用户名和密码的方法并且它有效:
http://username:password@the-site.com
我正在尝试使用 send_keys
元素方法和 Selenium 在此警报上编写登录凭据:
Login Alert
我在单击新 window 中的按钮后收到此警报,但我无法检查此 window 上的元素。
这是我的代码
import time
import pynput
from selenium import webdriver
driver=webdriver.Chrome("C:/Users/dhias/OneDrive/Bureau/stgg/chromedriver.exe")
driver.get("http://10.15.44.177/control/userimage.html")
time.sleep(3)
window_before = driver.window_handles[0]
driver.maximize_window()
btn=driver.find_element_by_name("TheFormButton3")
btn.click()
window_after = driver.window_handles[1]
driver.switch_to.window(window_after)
obj = driver.switch_to.alert
time.sleep(2)
obj.send_keys('Admin')
time.sleep(2)
我收到此错误,告诉我没有警报
我无法访问该页面,所以我无法尝试我的代码,但是,首先我通过添加 WebdriverWait
和新的 By.
函数对其进行了优化:
from selenium import webdriver as wd
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = wd.Chrome("C:/Users/dhias/OneDrive/Bureau/stgg/chromedriver.exe")
wait = WebDriverWait(driver, 15)
driver.get("http://10.15.44.177/control/userimage.html")
driver.maximize_window()
window_before = driver.window_handles[0]
wait.until(EC.element_to_be_clickable((By.NAME, "TheFormButton3"))).click()
driver.switch_to.window(driver.window_handles[1])
alert = driver.switch_to.alert
alert.send_keys('Admin\npassword\n') # \n works as an ENTER key
您可以尝试使用此代码查看警报是否真的存在或者是网页的一个元素:
from selenium.common.exceptions import NoSuchElementException
def is_alert_present(self):
try:
self.driver.switch_to_alert().send_keys('Admin\npassword\n') # \n works as an ENTER key
print('Sucess')
except NoSuchElementException:
print('No Alert Present')
另见 Alerts in the Selenium Documentation
也试试:
parent_h = browser.current_window_handle
# click on the link that opens a new window
handles = browser.window_handles # before the pop-up window closes
handles.remove(parent_h)
browser.switch_to_window(handles.pop())
# do stuff in the popup
# popup window closes
browser.switch_to_window(parent_h)
# and you're back
所以我终于找到了一个解决方案..我使用了你必须在 URL 请求中发送用户名和密码的方法并且它有效:
http://username:password@the-site.com