作为自动化的一部分,我正在尝试使用selenium登录本地托管的网站。该页面提供HTTP基本身份验证弹出窗口,我使用下面的代码发送凭据。然而,在使用调试器并逐步执行代码时,我发现超时异常会反复出现(在旁边标有注释的行)。
import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
driver = webdriver.Chrome(chrome_options=options)
driver.maximize_window()
driver.get(url)
wait = WebDriverWait(driver, 10)
alert = wait.until(EC.alert_is_present()) # This line causes the time out exception
alert = driver.switch_to.alert
alert.send_keys('domain\username' + Keys.TAB + 'password')
alert.accept()
time.sleep(5)
注:
https://username:password@ipaddress:port
格式,因此这迫使我将上述selenium方法作为唯一的选择
我想知道,新创建的虚拟机上是否缺少任何软件包,这对chrome WebDriver的工作至关重要。例如,Firefox Gecko驱动程序需要Visual studio可再发行文件才能工作。chrome WebDriver是否需要任何类似的软件包?
这里的工作最终是放弃使用Selenium方式使用send_keys()方法,而是使用其他包来完成这项工作。以下两个片段起作用了。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import keyboard
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
driver = webdriver.Chrome(r"path_to_chromedriver.exe", options=options)
driver.maximize_window()
driver.get("<replace with url>")
keyboard.write(r"<replace with username>")
keyboard.press_and_release("tab")
keyboard.write("<replace with password>")
keyboard.press_and_release("tab")
keyboard.press_and_release("enter")
或者这个(pip安装pywin32
before)
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import win32com.client
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
driver = webdriver.Chrome(r"path_to_chromedriver.exe", options=options)
driver.maximize_window()
driver.get("<replace with url>")
shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys(r"<replace with username>")
shell.SendKeys("{TAB}")
shell.SendKeys("<replace with password>")
shell.SendKeys("{TAB}")
我不认为ChromeDriver中的基本身份验证弹出窗口是作为“警报”公开的,所以您唯一的选择是https://username:password@IP地址:端口
。有趣的是,你说你可以在Firefox中编程到弹出窗口。
直到Chrome78,身份验证弹出窗口将显示并阻止测试脚本,您必须手动输入凭据(或使用更通用的桌面窗口操作应用编程接口),但我认为这不再有效。
问题内容: 有谁知道在自动化过程中使用Selenium或任何其他工具来处理浏览器身份验证吗? 问题答案: 警报方法authenticateUsing() 使您可以跳过“ Http基本身份验证”框。 从Selenium 3.4开始,它仍处于测试阶段 现在,仅针对 InternetExplorerDriver
在浏览器中直接键入下面的url,它可以工作, 但是,当我使用相同的url,用于selenium网络驱动程序测试时,它连接到 以及请求HTTP身份验证。我是否需要更改chrome浏览器中的任何设置,或调整默认配置文件?
我尝试了angular.js,并从一个restful api的web-ui开始(使用超文本传输协议基本授权)。这真的很好,除了授权工作。 到目前为止,我使用的是设置密码,但大多数情况下浏览器会打开http basic auth的默认登录表单。另一个奇怪的行为是angular请求不包含授权头(选项和GET请求都不包含)。我还尝试使用header配置在每个请求上设置此header,但这也不起作用。 有
问题内容: 如何在Golang网站上实施基本身份验证?这样,当有人访问某个页面时,他们的 浏览器 会提示他们登录。 问题答案: 为了强制用户进行身份验证/在用户浏览器中显示基本身份验证提示,请发送标头 因此,如果您有通话,您可以 这将导致浏览器打开您所指的提示。
问题内容: 以下代码成功连接到我的Ruby on Rails API,并使用AFNetworking返回JSON。我需要做什么来进行编辑以传递用户名和密码,以便我的API可以使用HTTP基本身份验证? 我已经阅读了他们的文档,但是我对Objective-C和AFNetworking还是陌生的,目前还没有意义。 问题答案: AFNetworking 2.x的答案已更新 对于AFNetworking
问题内容: 我正在尝试使用Google Chrome浏览器进行selenium测试。我想使用HTTP基本身份验证登录。在Selenium中未实现,因此建议加载扩展。我正在使用来自的代码 https://github.com/RobinDev/Selenium-Chrome-HTTP-Private- Proxy, 以及“如何使用chrome驱动程序使用Java覆盖selenium2中的基本身份验证