Selenium + Titanium代理获取请求的接口数据

有一个采集数据的需求,分析了页面数据后发现列表有一个id,但是没有其他数据,打开详情并不是通过id,而是其他一个字段,这就说明通过selenium抓取页面数据还不行,还要接口返回的数据。这个时候就需要用到代理了,在代理层面把数据拦截下来,把自己想要的接口数据保存起来,然后通过页面找到的id去匹配找到详情需要的字段。大致意思就是接口列表返回的数据有id也有详情的字段,但是html里面只有id,所以要把接口数据也存起来,然后根据id找到列表对应的详情字段。

代码如下:

csharp 复制代码
static async Task Main(string[] args)
{
    var proxyServer = new ProxyServer();
    proxyServer.AddEndPoint(new ExplicitProxyEndPoint(System.Net.IPAddress.Any, 8000, true)); // 8000为端口
    proxyServer.Start();

    var proxy = new Proxy
    {
        HttpProxy = "127.0.0.1:8000",
        SslProxy = "127.0.0.1:8000"
    };

    var chromeOptions = new ChromeOptions();
    chromeOptions.Proxy = proxy;
    chromeOptions.AddArgument("--headless"); // 启用无头模式
    chromeOptions.AddArgument("--no-sandbox"); // 可选,适用于某些环境
    chromeOptions.AddArgument("--disable-dev-shm-usage"); // 可选,适用于某些环
    using (var driver = new ChromeDriver( chromeOptions))
    {
        //proxyServer.BeforeRequest+=//返送前的请求request也会在这里拦截
        proxyServer.BeforeResponse += async (sender, e) =>//返回的请求都会在这里拦截
        {
            // 检查响应的 Content-Type
            if (e.HttpClient.Request.Url.Contains("/xxxx") && e.HttpClient.Request.Method == "POST")
            {

                Rootobject rootobject = JsonSerializer.Deserialize<Rootobject>(await e.GetResponseBodyAsString());
                if (rootobject.data.List != null)
                { 
                    foreach (var item in rootobject.data.List)
                    {   
                        Console.WriteLine($"tid:{item.tid}"); 
                    }
                }
            }
        };

        driver.Navigate().GoToUrl("https://domain.com");
        Thread.Sleep(1000);
        driver.FindElement(By.XPath("/html/body/div/div/div/section/div[3]/div[2]/div/div[1]/img")).Click();
    } 
    proxyServer.Stop();
    Console.ReadKey();
}

其实也可以直接请求接口,但是直接请求接口的话参数要搞清楚怎么传,这里选择了selenium主要是为了方便,不需要去研究请求参数也不用担心参数变动。selenium本身是支持代理请求的,我们只需要启动一个代理服务器,把代理服务器的地址给到selenium就可以了,这篇文章的代码逻辑也是如此。

相关推荐
Saniffer_SH2 小时前
【高清视频】4小时带你了解Saniffer公司针对PCIe Gen6测试的最新白皮书15.X
网络·人工智能·驱动开发·嵌入式硬件·测试工具·计算机外设·压力测试
怪侠_岭南一只猿3 小时前
爬虫阶段三实战练习题二:使用 Selenium 模拟爬取拉勾网职位表
css·爬虫·python·selenium·html
Zwj-c20 小时前
【测试报告】个人博客系统测试报告(功能测试、自动化测试、Bug描述)
功能测试·selenium·测试用例·bug
Saniffer_SH1 天前
【高清视频】SerialTek PCIe 5.0/6.0 协议分析仪API自动化编程演示
网络·人工智能·驱动开发·嵌入式硬件·测试工具·自动化·压力测试
bdy_y91 天前
自动化|selenium+python||通过cookies登录CSDN失败原因总结
爬虫·selenium·自动化
测试19981 天前
自动化测试:selenium详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
Saniffer_SH1 天前
【高清视频】如何针对电动汽车进行通信可靠性测试、故障注入与功率分析?
服务器·驱动开发·测试工具·fpga开发·计算机外设·硬件架构·压力测试
爆更小哇1 天前
自动化测试避坑:iframe 嵌套页面定位元素失败问题全解析
selenium·自动化·测试用例
悦心无谓1 天前
C++负载均衡式在线OJ测试报告
开发语言·c++·selenium·测试工具·负载均衡·编程语言·后端开发
Saniffer_SH1 天前
【高清视频】企业级NVMe SSD (E3.S, U.2)和消费类M.2 SSD拆解分析
服务器·网络·数据库·驱动开发·测试工具·fpga开发·压力测试