当前位置: 首页 > news >正文

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

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

代码如下:

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-Typeif (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就可以了,这篇文章的代码逻辑也是如此。

http://www.lryc.cn/news/467379.html

相关文章:

  • ELK Stack与Graylog:强大的日志分析和可视化工具
  • 安全见闻(6)——开阔眼界,不做井底之蛙
  • GRU神经网络理解
  • Windows 10、Office 2016/2019 和 PPTP 和 L2TP协议即将退役,企业应尽早做好准备
  • 论文阅读:Guided Linear Upsampling
  • 深度图和RGB图对齐
  • 滑动窗口与TCP的缓冲区(buff)的关系
  • 一款好用的搜索软件——everthing(搜索比文件资源管理器快)
  • C#WPF的App.xaml启动第一个窗体的3种方式
  • 【JAVA毕设】基于JAVA的酒店管理系统
  • 聚类--机器学习西瓜书阅读笔记(六)
  • OpenHarmony(1)开发环境搭建
  • Triton服务在ASR语音识别系统中的实现
  • Typora一款极简Markdown文档编辑、阅读器,实时预览,所见即所得,多主题,免费生成序列号!
  • python机器人编程——用python调用API控制wifi小车的实例程序
  • 面试学习整理-线程池
  • Debian会取代CentOS成为更主流的操作系统吗?
  • 网络安全领域推荐证书介绍及备考指南
  • SpringBoot项目ES6.8升级ES7.4.0
  • 深度学习 之 模型部署 使用Flask和PyTorch构建图像分类Web服务
  • MFC工控项目实例二十六创建数据库
  • springmvc源码流程解析(一)
  • 【论文阅读】SRGAN
  • kubelet PLEG实现
  • leetcode49:字母异位词分组
  • 一个将.Geojson文件转成shapefile和kml文件的在线页面工具(续)
  • 论文阅读(二十四):SA-Net: Shuffle Attention for Deep Convolutional Neural Networks
  • 基于YOLOv8深度学习的智能道路裂缝检测与分析系统【python源码+Pyqt5界面+数据集+训练代码】
  • YOLOv11入门到入土使用教程(含结构图)
  • python 爬虫抓取百度热搜