前言
为解决从Selenium中获取Network接口数据,潜心研究了一小会儿,遂有此文
基本看这篇文章的,多多少少都跟 沾亲带故。所以直接进入正题。
- 只想要代码,文章前边自取
- 想看长篇大论,先看这篇 【Selenium】控制当前已经打开的 chrome浏览器窗口(高级版)
应用场景
Chrome浏览器 -> 开发者工具 -> Network 中所有的数据包,我要全部拿下来。
举个例子??
- 站通过XHR异步加载数据,然后再渲染到 页上。而通过Selenium去获取渲染后的数据,是同HTML打交道的
- 异步加载返回数据是json文件的,有时渲染在 页上,不一定是完整的json文件中的数据;最重要的是,json文件解析起来很方便
通过selenium去拿 页数据,往往是两个途径:
- selenium.page_source,通过解析HTML
- 通过中间人进行数据截获,数据源是啥就是啥
这两种方法各有利弊,但是这篇文章就可以将他们相结合起来了,实在是妙啊!
可能你会有疑惑??使用去请求不就完事了,
请你想一下,我这都使用上selenium了,你觉得我还会去使用再多请求一遍吗
完整代码
Selenium获取Network
这里指定9527端口打开浏览器,也可以不指定,看上一篇文章
代码讲解在下面
运行效果看下面动图,轻松拿到该 页请求中的所有数据包~
再看 Selenium官方文档,所以是可以通过CDP协议去操作Selenium打开的Chrome浏览器的。
回到上面的代码中,
- ,这段代码是开启浏览器的性能日志记录
简单理解为 开发者工具中的 ,看下图
知识补充
使用 可以查看当前的可用日志类型的列表,
下面两幅图分别是开启性能日志记录 和 不开启性能日志记录 的可用日志类型返回值~
再接下来就是过滤请求包,一般来说,像图片、css&js文件等,往往是不需要的,所以可以对它们过滤~(这一步可以根据自己的需求来过滤)
最后是获取数据包的 ,这个是调用 cdp 的关键,它就好比每个 络数据包的身份证。
在Selenium中调用cdp时候,需要传入 ,浏览器会验证是否存在该 ,
- 如果存在,则响应并返回数据;
- 如果不存在,则会抛出 异常。
在这里的代码中,我对这个异常进行了忽略的处理~
后话
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树 络爬虫Selenium211375 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!