selenium.chrome怎么写扩展拦截或转发请求?

这篇具有很好参考价值的文章主要介绍了selenium.chrome怎么写扩展拦截或转发请求?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Selenium WebDriver 是一组开源 API,用于自动测试 Web 应用程序,利用它可以通过代码来控制chrome浏览器!

有时候我们需要mock接口的返回,或者拦截和转发请求,今天就来实现这个功能。

代码已开源: https://github.com/yuzd/OpenQA.Selenium.Chrome.Fiddler

nuget

OpenQA.Selenium.Chrome.Fiddler

开始coding

我们新创建一个功能:OpenQA.Selenium.Chrome.Fiddler

一个chrome扩展 最起码有2个文件

·manifest.json

· background.js

稍微解释一下:

manifest.json 是来描述chrome扩展的

{
      "version": "1.0.0",
      "manifest_version": 2,
      "name": "Chrome Fiddler",
      "permissions": [
          "proxy",
          "tabs",
          "unlimitedStorage",
          "storage",
          "<all_urls>",
          "webRequest",
          "webRequestBlocking"
      ],
      "background": {
          "scripts": ["background.js"]
   },
      "minimum_chrome_version":"22.0.0"
  }

background.js 是逻辑处理模块

因为拦截api 或者 转发 需要用的chrome的api

chrome.webRequest.onBeforeRequest.addListener(
     function(details) {
        //逻辑处理
     },
     { urls: ['<all_urls>']},
     ['blocking', 'extraHeaders', 'requestBody']
  );

这个api的函数 接收的details参数:

  ·details.url 是api的接口

  函数的返回

  · {cancel:true} 拦截请求

  · {redirectUrl:''} 转发到指定url

  写selenium.chrome插件

  新建一个netstand工程,然后引用

  · Selenium.WebDriver

/// <summary>
  /// Add Fiddler extention
  /// </summary>
  /// <param name="options">Chrome options</param>
  /// <param name="fiddlerOption">Proxy host</param>
  public static void AddFiddler(this ChromeOptions options, FiddlerOption fiddlerOption)
  {
      var backgroundProxyJs = ReplaceTemplates(background_js, fiddlerOption);
      if (!Directory.Exists("Plugins"))
          Directory.CreateDirectory("Plugins");
      var guid = Guid.NewGuid().ToString();
      var manifestPath = $"Plugins/manifest_{guid}.json";
      var backgroundPath = $"Plugins/background_{guid}.js";
      var archiveFilePath = $"Plugins/proxy_auth_plugin_{guid}.zip";
      File.WriteAllText(manifestPath, manifest_json);
      File.WriteAllText(backgroundPath, backgroundProxyJs);
      using (var zip = ZipFile.Open(archiveFilePath, ZipArchiveMode.Create))
      {
          zip.CreateEntryFromFile(manifestPath, "manifest.json");
          zip.CreateEntryFromFile(backgroundPath, "background.js");
      }
      File.Delete(manifestPath);
      File.Delete(backgroundPath);
      options.AddExtension(archiveFilePath);
  }
  private static string ReplaceTemplates(string str, FiddlerOption fiddlerOption)
  {
      if (fiddlerOption.OnBeforeRequestOptions != null)
      {
          var beforeConfigs = Newtonsoft.Json.JsonConvert.SerializeObject(fiddlerOption.OnBeforeRequestOptions);
          str = str.Replace("{before_configs}", beforeConfigs);
      }
      return str;
  }

上面的代码主要是创建一个chrome扩展zip包

  然后再selenium.chrome启动的时候传进去这个zip包的地址

  使用方法

var driverBinary = @"D:\soft\chrome\chrome2\Chrome-bin\";
  ChromeOptions options = new ChromeOptions
  {
      BinaryLocation = Path.Combine(driverBinary, "chrome.exe")
  };
  Environment.SetEnvironmentVariable("webdriver.chrome.driver", driverBinary);
  options.AddArgument("--disable-blink-features=AutomationControlled");
  options.AddArguments("--disable-infobars");
  List<string> ls = new List<string> { "enable-automation" };
  options.AddExcludedArguments(ls);
  #region Fillder
  options.AddFiddler(new FiddlerOption
  {
      OnBeforeRequestOptions = new List<FiddlerOnBeforeRequestOptions>
      {
          // 配置转发
          new FiddlerOnBeforeRequestOptions
          {
              Match = "https://www.cnblogs.com/yudongdong/ajax/GetPostStat",//正则
              RedirectUrl = "http://localhost:5000/GetPostStat",//如果匹配成功则将requestBody转发到这个url中去
              Cancel = false//如果配置了cancel=true那么转发将无效,true的意思是直接拦截这次的请求,不去发送了
          },
          // 配置拦截
          new FiddlerOnBeforeRequestOptions
          {
              Match = "https://www.cnblogs.com/yudongdong/ajax/blogStats",
              Cancel = true//true的意思是直接拦截这次的请求,不去发送了
          },
      }
  });
  #endregion
  var chrome = new ChromeDriver(driverBinary, options);

实现效果 

selenium.chrome怎么写扩展拦截或转发请求?

 因此我建立了一个软件测试开发自学团,正在学习测试的小伙伴可以通过点击下面的小卡片 文章来源地址https://www.toymoban.com/news/detail-493288.html

到了这里,关于selenium.chrome怎么写扩展拦截或转发请求?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium Wire - 扩展 Selenium 能够检查浏览器发出的请求和响应

    使用 Selenium 进行自动化操作时,会存在很多的特殊场景,比如会修改请求参数、响应参数等。 本篇将介绍一款 Selenium 的扩展,即能够检查浏览器发出的请求和响应 - Selenium Wire。 Selenium Wire 扩展了 Selenium 的 Python 绑定,可以访问浏览器发出的底层请求。除了与 Selenium 相同的

    2024年02月04日
    浏览(58)
  • Python |Selenium Wire 扩展Selenium的Python绑定,使您能够检查浏览器发出的请求。

       前面介绍了Seleniums的入门应用,现在为大家介绍它的一个插件Selenium Wire。现如今部分网站都设置了反爬机制,常见的就是在接口请求头中有js代码生成的请求参数,那么一般通过js破解参数难度较大,于是就可以借助Selenium Wire来获取解析后的参数,可以实现这样一个功能

    2024年02月11日
    浏览(47)
  • Java爬虫 通过Chromedriver+Chrome浏览器+selenium获取页面的请求和响应(未完全实现)

    因为最近看到一个软件可以实现网页的识别,自动导入网页的内容,感觉这个功能很厉害(真心佩服设计那个软件的人)。但不清楚这个软件的网页识别的实现,也没有接触过相关的技术,就上网搜索并学习一些相关的技术,所以有了这篇文章。但是只能获取简单的请求,一

    2024年02月13日
    浏览(74)
  • python selenium playwright库使用教程 破解网页防止开发者模式 截取数据请求 隐藏chrome

    下载 chromedriver的版本一定要与Chrome的版本一致,不然就不起作用。 有两个下载地址: 1、 http://chromedriver.storage.googleapis.com/index.html 2、 CNPM Binaries Mirror 当然,你首先需要查看你的Chrome版本,在浏览器中输入chrome://version/  放chromedriver在chrome安装目录  默认目录一般为:C:Pro

    2023年04月25日
    浏览(48)
  • Selenium启动Chrome插件(Chrome Extensions)

    Selenium启动Chrome插件(Chrome Extensions) 需求描述: 在使用WebDriver启动Chrome浏览器时式启动一个默认设置(比较干净)的浏览器,但是我在自动化测试的过程中需要用到插件。 实现方法: 其一:启动浏览器的同时直接取安装包.crx文件进行安装; 下载所需要的插件安装包文件.crx,存储

    2024年02月12日
    浏览(42)
  • selenium 安装Chrome驱动

    (1)Chrome版本在113之前对应下载的driver:CNPM Binaries Mirror (npmmirror.com)          Chrome版本在113-120对应下载的driver:CNPM Binaries Mirror (2)下载完后,解压,将chromedriver.exe放到         (a)Python的 有Python.exe的文件夹里         (b)安装到Chrome里有chrome.exe的文件夹里

    2024年03月24日
    浏览(35)
  • selenium实现chrome多开

    有时候为了避开登录验证所带来的麻烦,先登录后用selenium预加载之前的用户配置及cookie信息会极大便利自动化目标的实现,但受限于selenium及chrome的用户配置文件加锁机制,每次只能有一个进程操作大大限制了自动化目标的实施。所幸可以通过chrome的多用户可以完成selenium多

    2024年02月11日
    浏览(36)
  • selenium打开chrome闪退

    原因: 1、网页驱动版本和chrome版本不一 查看浏览器版本: 版本只需看前三位110 打开网址:https://chromedriver.storage.googleapis.com/index.html下载对应的浏览器驱动. 配置环境变量  2、selenium版本过高 选用旧版本,这里推荐的4.1.2 在IDE终端输入:pip install selenium==4.1.2 目前就发现这两点

    2024年02月19日
    浏览(35)
  • Chrome版本对应Selenium版本

    1.获得浏览器版本号和驱动 浏览器版本: 119.0.6045.124 浏览器驱动版本: 119.0.6043.1 / 120.0.6051.0 访问 https://vikyd.github.io/download-chromium-history-version/ 2. 安装selenium pip install selenium==4.1.1 -i http://pypi.mirrors.ustc.edu.cn/simple/ --trusted-host pypi.mirrors.ustc.edu.cn 3.解压chromedriver到python安装目录 和p

    2024年02月04日
    浏览(48)
  • selenium自动化chrome

    chrome_options = webdriver.ChromeOptions() - 创建 Chrome 浏览器的选项对象。 chrome_options.binary_location = r\\\"C:Program FilesGoogleChromeApplicationchrome.exe\\\" - 指定 Chrome 浏览器的二进制文件路径。 chrome_options.add_argument(\\\'--disable-gpu\\\') - 禁用 GPU 加速,可以提高脚本在浏览器中的稳定性和性能。 chrom

    2024年02月09日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包