【Selenium】Selenium获取Network数据(高级版)

前言

为解决从Selenium中获取Network接口数据,潜心研究了一小会儿,遂有此文

基本看这篇文章的,多多少少都跟 沾亲带故。所以直接进入正题。

  • 只想要代码,文章前边自取
  • 想看长篇大论,先看这篇 【Selenium】控制当前已经打开的 chrome浏览器窗口(高级版)

应用场景

Chrome浏览器 -> 开发者工具 -> Network 中所有的数据包,我要全部拿下来。

举个例子??

  • 站通过XHR异步加载数据,然后再渲染到 页上。而通过Selenium去获取渲染后的数据,是同HTML打交道的
  • 异步加载返回数据是json文件的,有时渲染在 页上,不一定是完整的json文件中的数据;最重要的是,json文件解析起来很方便

通过selenium去拿 页数据,往往是两个途径:

  1. selenium.page_source,通过解析HTML
  2. 通过中间人进行数据截获,数据源是啥就是啥

这两种方法各有利弊,但是这篇文章就可以将他们相结合起来了,实在是妙啊!


可能你会有疑惑??使用去请求不就完事了,

请你想一下,我这都使用上selenium了,你觉得我还会去使用再多请求一遍吗

完整代码

Selenium获取Network

这里指定9527端口打开浏览器,也可以不指定,看上一篇文章

代码讲解在下面

运行效果看下面动图,轻松拿到该 页请求中的所有数据包~


再看 Selenium官方文档,所以是可以通过CDP协议去操作Selenium打开的Chrome浏览器的。

回到上面的代码中,

  • ,这段代码是开启浏览器的性能日志记录

简单理解为 开发者工具中的 ,看下图


知识补充

使用 可以查看当前的可用日志类型的列表,
下面两幅图分别是开启性能日志记录不开启性能日志记录 的可用日志类型返回值~


再接下来就是过滤请求包,一般来说,像图片、css&js文件等,往往是不需要的,所以可以对它们过滤~(这一步可以根据自己的需求来过滤)

最后是获取数据包的 ,这个是调用 cdp 的关键,它就好比每个 络数据包的身份证。
在Selenium中调用cdp时候,需要传入 ,浏览器会验证是否存在该 ,

  • 如果存在,则响应并返回数据;
  • 如果不存在,则会抛出 异常。
    在这里的代码中,我对这个异常进行了忽略的处理~

后话

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树 络爬虫Selenium211375 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年7月25日
下一篇 2022年7月26日

相关推荐