使用Selenium和代理用户名和密码在C#中进行无头浏览

发表于:2023-4-18 09:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:亿牛云爬虫专家    来源:稀土掘金

  Selenium是一个自动化测试工具,可以模拟用户在浏览器中的操作。有时候我们需要使用代理服务器来访问一些受限制的网站,或者隐藏我们的真实IP地址。如果代理服务器需要用户名和密码进行验证,那么我们就需要在Selenium中设置代理用户名和密码。
  然而,在C#中使用Selenium和爬虫代理加强版IP的时候,因为代理服务器需要用户名和密码进行认证,Chrome浏览器会弹出一个认证窗口要求输入用户名和密码,而这个窗口是由操作系统提供的,不属于网页元素,所以Selenium无法识别或控制它。这就导致了我们无法通过Selenium自动输入用户名和密码,并且也无法关闭这个窗口。
  目前还没有直接的方法可以解决这个问题,但是有一些可能的替代方案:
  使用其他支持设置代理用户名和密码的浏览器驱动,比如Firefox或者IE。
  使用第三方库或者工具来模拟键盘输入或者鼠标点击来填写或者关闭认证窗口。
  使用其他方式来绕过代理服务器的验证机制,比如修改请求头或者使用cookies。
  使用一个Chrome扩展来自动填充认证窗口。
  下面创建一个Chrome扩展插件,然后加载使用完成自动认证窗口
  首先要实现Chrome扩展,你需要创建一个manifest.json文件,用来描述扩展的基本信息和权限:
  {
    "manifest_version": 2,
    "name": "uth_ext",
    "version": "1.0",
    "background": {
      "scripts": ["background.js"]
    },
    "permissions": [
      "webRequest",
      "webRequestBlocking",
      "<all_urls>"
    ]
  }
  然后,你需要创建一个background.js文件,用来监听浏览器的请求,并在遇到认证窗口时自动填充用户名和密码:
  chrome.webRequest.onAuthRequired.addListener(
    function(details, callback) {
      // Replace with your own username and password
      var username = 'user';
      var password = 'pass';
      callback({authCredentials: {username: username, password: password}});
    },
    {urls: ["<all_urls>"]},
    ['blocking']
  );
  最后,你需要将这两个文件打包成一个crx文件,并在Chrome浏览器中安装。
  下面使用代码实现:
  using OpenQA.Selenium;
  using OpenQA.Selenium.Chrome;
  class Program
  {
      static void Main(string[] args)
      {
          ChromeOptions options = new ChromeOptions();
          // 设置代理服务器地址、端口、用户名和密码
          options.AddArgument("--proxy-server=www.16yun.cn:31111");
          options.AddArgument("--proxy-username=16ip");
          options.AddArgument("--proxy-password=16ps");
          // 启用无头模式
          options.AddArgument("--headless");
          // 加载Chrome扩展,用于自动填充认证窗口
          options.AddExtension("auth_ext.crx");
          // 创建ChromeDriver实例
          IWebDriver driver = new ChromeDriver(options);
          // 访问需要认证的网页
          driver.Navigate().GoToUrl("https://www.amazon.com/");
          // 等待认证窗口出现并自动填充
          WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
          wait.Until(ExpectedConditions.AlertIsPresent());
          IAlert alert = driver.SwitchTo().Alert();
          alert.SetAuthenticationCredentials("username", "password");
          alert.Accept();
          // 关闭浏览器
          driver.Quit();
      }
  }
  上面的代码通过加载Chrome扩展,实现认证窗口的自动填充,从而自动使用代理用户名和密码进行访问。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号