跳到主要内容

DrissionPage使用技巧和坑

基本使用

最好设置一下Python的虚拟环境变量,虚拟环境变量的设置方案在前面已有。

安装

启动虚拟环境变量或者不启动后,执行命令。 pip install DrissionPage

下载最新版本的谷歌浏览器,最好是dev版本的,64位的。

DrissionPage 有三种入口,分别是ChromiumPage,SessionPage,WebPage 如果只要控制浏览器,导入ChromiumPage。如果只要收发数据包,导入SessionPage。WebPage是功能最全面的页面类,既可控制浏览器,也可收发数据包。其实没有太大的影响,一般工作的情况下,使用ChromiumPage控制浏览器即可。

只需要如下的代码即可。

from DrissionPage import ChromiumPage

page = ChromiumPage()
page.get('http://DrissionPage.cn')

获取元素和标签的例子看官网 https://www.drissionpage.cn/get_start/examples/control_browser

官网其他的文档,无需看了,用到了再说。

监听获取

不管是用哪个组件(ChromiumPage,SessionPage,WebPage),监听的操作模式是一样的。

我举例个监听淘宝数据,官网的不行,写的太复杂。

这里看过后就能明白。

初始化一个实例

# 浏览器端口
ChromiumOptionsPort = 9111
ChromiumOptionsUserDatePath=r'./data'

from DrissionPage import ChromiumPage,ChromiumOptions

# page = ChromiumPage()
SelfBrowerInstance=None
class _SelfBrower:
do = ChromiumOptions().set_paths(local_port=ChromiumOptionsPort,user_data_path=ChromiumOptionsUserDatePath)
page = ChromiumPage(addr_or_opts=do)
# def getInstance():
# if SelfBrowerInstance==None:
# SelfBrowerInstance=_SelfBrower()
# return SelfBrowerInstance
SelfBrower = _SelfBrower()

ShopWaitSecond = 0 # 单回合每个店铺详情的每次循环等待秒数 180 使用这个实例

    page = SelfBrower.page
page.listen.start("h5/mtop.taobao.pcdetail.data.get/1.0/") # 从谷歌浏览器开发者工具中拿到的AJAX请求连接
page.get("AJAX请求连接所在的HTML的URL,比如一个产品连接淘宝的")
packet = page.listen.wait()
if packet != None:
resultJSON = packet.response.raw_body

其中这里的监听,需要在全部的页面逻辑之前进行start,意思就是,监听是可以跨页面监听的,这么思考,在程序启动后,先订阅一下自己要监听某个AJAX接口,然后在跳转了好多个页面后,突然发现了这个AJAX,那么才会执行wait逻辑,但是一般情况都是一个页面get之前,监听一下就行了,不需要在程序入口后监听一大堆接口。 上面的resultJSON其实就是AJAX返回的JSON数据了,

自定义谷歌浏览器位置

参考上面初始化实例的配置中心,

ChromiumOptions().set_browser_path(path)

执行 JS 语句

page.run_js(f'localStorage.setItem("__user_token.v3",`{token}`)')

反检测

如果是用的ChromiumPage,自动就会加上标头,如果是用sessionPage这个,那么需要自己设置一下标头。

跳转页面

也就是get一下就行了,又或者点击浏览器中的一些按钮,会执行前端代码的跳转,比如登录按钮。

也没啥坑不坑的,需要主要的是谷歌浏览器的版本问题一定程序上总会出现莫名其妙的问题,还有就是尽可能的用python3.10往上版本。