如何在 Selenium Webdriver 中处理代理认证
什么是代理?
代理充当发送请求的客户端和响应服务器之间的中介。代理的主要用途是在多个交互系统之间维护隐私和封装。
代理还可以通过充当客户端和网络服务器之间的防火墙,为网络增加一层安全性。当客户端使用的网站需要根据网站内容标记为允许或阻止时,尤其会使用此功能。
此过程称为“内容过滤”,最常用于教育机构、公司办公室等。借助代理,可以轻松实现内容过滤。就互联网而言,代理可以实现为独立的服务器,位于客户端机器和实际响应的网络或数据库服务器之间。
SOCKS 和 HTTP 代理之间的区别
SOCKS | HTTP 代理 |
---|---|
SOCKS 代表安全套接字。它通常用作客户端和服务器之间的防火墙 | HTTP 代理也可以用作客户端和服务器之间的防火墙,但只能用于 HTTP 请求 |
SOCKS 不解释正在交换的数据 | HTTP 代理解释客户端和服务器之间交换的数据 |
性能较慢 | 与 SOCKS 相比性能更好 |
如何在 Chrome 中使用 Selenium Webdriver 处理代理
可以使用以下方法处理 Chrome 中 Selenium 的 HTTP 代理认证
- 使用 AutoIT 工具
- 使用警报
使用 AutoIT 工具
Auto IT 是一款用于 Windows 桌面自动化的第三方工具。由于 Selenium 只处理基于网络的弹出窗口和窗口,因此无法使用 Selenium 处理操作系统控件。
这需要将 Auto IT 等外部第三方工具与 Selenium 集成。为此,Auto IT 最常用于处理网站上的文件上传和文件下载。
要使用 AutoIT,您需要在本地机器上下载并安装 AutoIT 软件。
AutoIT 的下载和安装在文章中介绍。
打开“程序” – “Autoit 工具” – “SciTE 脚本编辑器”,在 Autoit 编辑器中添加以下 AutoIt 脚本,并将其保存为“ProxyAuthentication.au3”到您的系统。
编译文件并将其转换为“ProxyAuthentication.exe”。
在 Eclipse 中,将 Auto IT 文件添加到 Selenium 脚本并运行。
以下是用于 HTTP 代理认证的 AutoIT 脚本
Send("guru99{ENTER}") Send("guru99{ENTER}")
您需要使用以下代码将 Auto IT 文件传递给 Selenium webdriver 执行
源代码
package Guru99Demo; import java.io.IOException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class AutoITDemo { public static void main(String[] args) throws IOException { System.setProperty("webdriver.chrome.driver", "D:\\ chromedriver.exe");; WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/basic_auth.php"); //Passing the AutoIt Script to Selenium Runtime.getRuntime().exec("D:\\Data_Personal\\ProxyAuthentication.exe"); } }
代码解释
- 第一步,您通过设置系统属性指向 chromedriver.exe 文件来初始化 Chrome 驱动程序实例。
- 第二步,您然后初始化 webdriver 对象并通过 get 方法传递网站 URL。
- 最后,您使用 AutoIT 脚本文件将用户名和密码传递给 HTTP 代理认证弹出窗口。
代码输出
使用警报
警报是 Selenium webdriver 提供的简单内置功能。您可以通过切换到 HTTP 代理认证警报并直接将用户名和密码传递给警报来使用 Selenium webdriver 处理代理认证弹出窗口。借助 send keys 方法。
示例:
测试场景
使用 Selenium webdriver 中的警报处理网站上的 HTTP 代理认证弹出窗口:https://demo.guru99.com/test/basic_auth.php。
源代码示例
package Guru99Demo; import java.io.IOException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class AlertsDemo { public static void main(String args[]) throws IOException { System.setProperty("webdriver.chrome.driver", "D:\\Data_Personal\\Software\\chromedriver_win32\\chromedriver.exe");; WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/basic_auth.php"); // Handling Username alert driver.switchTo().alert().sendKeys("guru99"); driver.switchTo().alert().accept(); // Handling Password alert driver.switchTo().alert().sendKeys("guru99"); driver.switchTo().alert().accept(); } }
代码输出
代理认证成功完成。
代码解释
- 最初,您通过设置 webdriver 属性指向 chromedriver.exe 文件的位置来实例化 Chrome 驱动程序实例。
- 然后,您通过将 URL 作为参数传递给 driver.get() 方法来打开所需网站的 URL。
- URL 打开后,您切换到用户名警报并发送用户名 – guru99。然后,您使用 alert.accept 方法单击警报上的“确定”按钮。
- 然后,您切换到密码警报并发送密码 – guru99。然后,您使用 alert.accept 方法单击警报上的“确定”按钮。
摘要
- 代理充当发送请求的客户端和响应服务器之间的中介。代理的基本用途是在多个交互系统之间维护隐私和封装。
- 可以使用以下方法处理 Chrome 中 Selenium 的 HTTP 代理认证
- 在网站 URL 中传递用户名和密码
- 使用 AutoIT 工具
- 使用警报
- 在上述三种方法中,使用警报是处理 Selenium webdriver 中 HTTP 代理认证最有效的方法。