如何在 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 代理认证弹出窗口。

代码输出

Username Alert Handling Using AutoIT
使用 AutoIT 处理用户名警报
Password Alert Handling Using AutoIT

使用 AutoIT 处理密码警报
Proxy Authentication Success Screen

代理认证成功界面

使用警报

警报是 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 代理认证最有效的方法。