鼓捣C#的时候,想用Selenium.WebDriver.DevTools.Network,但是找了好久也没有找到关于Selenium4的DevTools里Network的用法,头快抓烂了.
于是乎到Github里鼓捣鼓捣源码selenium,没想到还真鼓捣出来一点东西,所以赶快记录一下.
Win10 + VS2019 + Chrome87(同版本driver) + Selenium.WebDriver4.0.0-alpha07
上菜using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using OpenQA.Selenium.DevTools.V87;
// 2021.1.4 author by mu yao
namespace DevToolsDemo
{
public class Demo
{
// 构造方法按需设置
public Demo() { }
private List> _responses = new List>();
// 线程锁
private object obj_lock = new object();
///
/// 主要使用逻辑, 异步方法
///
///
public async Task RunAsync()
{
// 初始化一个驱动, 本例中未设置 options 参数
var dr = new OpenQA.Selenium.Chrome.ChromeDriver();
// 初始化 session
var session = dr.CreateDevToolsSession();
// 初始化 domains
var domains = session.GetVersionSpecificDomains();
// 设置 Network 为 Enable
await domains.Network.Enable(new OpenQA.Selenium.DevTools.V87.Network.EnableCommandSettings());
// 订阅 接收 Response 事件
domains.Network.ResponseReceived += Network_ResponseReceived;
// 打开目标网站
dr.Url = "http://www.***.com";
// 设置 获取 Response body 的参数
var cmd = new OpenQA.Selenium.DevTools.V87.Network.GetResponseBodyCommandSettings();
// 获取 RequestId 加入参数中
cmd.RequestId = GetRequestId();
// rlt 是最后获得的 Response body
var rlt = domains.Network.GetResponseBody(cmd).GetAwaiter().GetResult();
// 输出得到的结果
Console.WriteLine(rlt.Body);
// 设置 Network 为不可用
await domains.Network.Disable();
// 关闭驱动
dr.Quit();
}
///
/// 获取 RequestId
///
///
private string GetRequestId()
{
string rlt = "";
List> box;
// responses List 要加锁
lock (obj_lock)
{
box = _responses.ToList();
}
foreach (var u in box)
{
// 结合需求设置
if (u["url"] != null)// <筛选的条件>
{
rlt = u["requestId"];
break;
}
else
{
continue;
}
}
return rlt;
}
///
/// 接收 Response 事件
///
///
///
private void Network_ResponseReceived(object sender, OpenQA.Selenium.DevTools.V87.Network.ResponseReceivedEventArgs e)
{
var dic = new Dictionary();
// e 中是接收到的 Response 信息, 本例中只需求 requestId 和 url
dic.Add("requestId", e.RequestId);
dic.Add("url", e.Response.Url);
// responses List 要加锁
lock (obj_lock)
{
_responses.Add(dic);
}
}
}
}


![Selenium.WebDriver.DevTools.Network的一个小Demo[C#] Selenium.WebDriver.DevTools.Network的一个小Demo[C#]](http://www.mshxw.com/aiimages/31/906766.png)
