如何处理代理身份验证 Selenium 网络驱动程序

⚡ 智能摘要

代理身份验证 Selenium WebDriver 会处理浏览器通过安全代理服务器连接时出现的凭据弹出窗口。因为 Selenium 无法直接操作原生对话框,有两种方法:使用 AutoIt 工具和内置警报。

  • 🛡️ 代理角色: 代理服务器是一种中间服务商,可以增加隐私、安全和内容过滤功能。
  • 🔀 SOCKS 与 HTTP: SOCKS 不解析数据;HTTP 代理只读取 HTTP 请求。
  • 🪟 原生弹出窗口: Selenium 无法处理操作系统对话框,因此需要外部帮助。
  • 🛠️ AutoIt 方法: 编译后的 AutoIt 脚本会将用户名和密码发送到弹出窗口。
  • ???? 警报方法: 切换到警报模式,使用 sendKeys 发送凭据,然后接受。

处理代理身份验证 Selenium 网络驱动程序

什么是代理?

代理充当客户端发送请求和服务器响应之间的中介。代理的主要用途是维护多个交互系统之间的隐私和封装。

代理还可以充当客户端和 Web 服务器之间的防火墙,为 Web 增加另一层安全性。当客户端使用的网站必须根据网站内容标记为允许或阻止时,代理尤其有用。

此过程称为“内容过滤”,最常用于教育机构、公司办公室等。借助代理可以轻松完成内容过滤。在互联网上,代理可以实现为位于客户端计算机和实际响应的 Web 或数据库服务器之间的单独服务器。

SOCKS 和 HTTP 代理之间的区别

袜子 HTTP代理
SOCKS 代表安全套接字。它通常用作客户端和服务器之间的防火墙 HTTP 代理也可以用作客户端和服务器之间的防火墙,但只能用于 HTTP 请求
SOCKS 不解释正在交换的数据 HTTP 代理解释客户端和服务器之间交换的数据
性能较慢 与 SOCKS 相比,性能更佳

如何处理代理 Selenium Chrome 中的 Webdriver

HTTP 代理身份验证 Selenium Chrome 中可以使用以下方法处理

  • 使用 AutoIt 工具
  • 使用警报

使用 AutoIt 工具

AutoIt 是一款用于 Windows 桌面自动化的第三方工具。 Selenium 仅处理基于 Web 的弹出窗口和窗口,无法使用 Selenium.

这需要使用诸如 AutoIt 之类的外部第三方工具进行集成。 Selenium因此,AutoIt 最常用于处理网站上的文件上传和文件下载。

要使用 AutoIt,您需要在本地计算机上下载并安装 AutoIt 软件。

AutoIt 的下载和安装说明已包含在内 刊文.

打开程序 - Autoit 工具 - SciTE 脚本编辑器,在 Autoit 编辑器中添加下面提到的 AutoIt 脚本,然后在系统中将其保存为“ProxyAuthentication.au3”

编译该文件并将其转换为“ProxyAuthentication.exe”。

In Eclipse将 AutoIt 文件添加到 Selenium 脚本并运行

以下是用于 HTTP 代理身份验证的 AutoIt 脚本。

Send("guru99{ENTER}")
Send("guru99{ENTER}")

您需要将 AutoIt 文件传递​​给执行。 Selenium webdriver 使用下面的代码

来源 Code:

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");
    }
}

Code 说明:

  • 第一步,通过设置系统属性来指向 chromedriver.exe 文件,初始化 Chrome 驱动程序实例
  • 第二步,您需要初始化一个 Web 驱动程序对象并将网站传递给它。 URL 使用 get 方法
  • 最后,您正在使用 AutoIt 脚本文件将用户名和密码传递给 HTTP 代理身份验证弹出窗口。

Code 输出:

使用 AutoIt 处理用户名警报
使用 AutoIt 处理用户名警报
使用 AutoIt 处理密码警报

使用 AutoIt 处理密码警报
代理身份验证成功屏幕

代理身份验证成功屏幕

使用警报

警报是简单的内置功能,由 Selenium web 驱动程序。您可以使用以下方式处理代理身份验证弹出窗口 Selenium 通过切换到 HTTP 代理身份验证警报并将用户名和密码直接传递给警报,可以实现 Web 驱动程序。借助发送密钥方法。

例如::

测试场景:

处理网站上的 HTTP 代理身份验证弹出窗口: https://demo.guru99.com/test/basic_auth.php 使用警报 Selenium 网络驱动程序。

源代码示例:

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

Code 输出

代理身份验证已成功完成。

Code 说明:

  • 最初,您通过设置 webdriver 属性来实例化 Chrome 驱动程序的实例,以指向 chromedriver.exe 文件的位置
  • 然后,你打开了 URL 通过访问所需网站 URL 作为 driver.get() 方法的参数
  • 一旦 URL 窗口已打开,您正在切换到用户名提示框并发送用户名——guru99。然后,您正在使用 alert.accept 方法点击提示框中的“确定”按钮。
  • 然后,您将切换到密码警报并发送密码 – guru99。然后使用 alert.accept 方法单击警报上的“确定”按钮

常见问题

您可以将凭据嵌入为 https://user:pass@site.com,但现代 Chrome 和 Firefox 出于安全考虑,请阻止此操作。目前,使用警报或浏览器扩展程序进行代理身份验证更为可靠。

AutoIt 可实现自动化 Windows 桌面控件 Selenium 无法访问,例如原生身份验证弹出窗口和文件上传对话框。您可以将 AutoIt 脚本编译成可执行文件并从此处调用它。 Selenium 码。

代理服务器会为特定应用程序或浏览器重新路由流量,主要用于隐藏 IP 地址或过滤内容。VPN 则会对设备的所有流量进行系统级加密,提供比标准代理服务器更强的隐私保护。

是的。人工智能驱动的测试工具可以检测身份验证对话框,注入存储的凭据,并在弹出窗口行为发生变化时进行自我修复,从而减少对跨浏览器脆弱的 AutoIt 脚本的依赖。

AI 工具能够智能轮换代理服务器,检测被阻止的请求,并在出现身份验证提示时调整等待时间。这种自动化功能提高了使用企业代理或内容过滤代理的网站的测试稳定性。

是的。 Selenium 4 版本新增了 Chrome DevTools 协议支持,允许您以编程方式设置 HTTP 凭据并处理基本身份验证,从而在许多代理场景中避免使用 AutoIt。

总结一下这篇文章: