跳到主要内容

🛰️ 访问网页


本节介绍 Tab 对象访问网页的相关内容。

✅️️ 连接方法

📌 get()

该方法用于跳转到一个网址。当连接失败时,程序会进行重试。

可指定本地文件路径。

参数名称类型默认值说明
urlstr必填目标 url,可指向本地文件路径
show_errmsgboolFalse连接出错时是否显示和抛出异常
retryintNone重试次数,为None时使用页面参数,默认3
intervalfloatNone重试间隔(秒),为None时使用页面参数,默认2
timeoutfloatNone加载超时时间(秒)
----------------------- 以下参数仅 s 模式有效 ------
paramsdictNoneurl 请求参数
datadict
str
None携带的数据
jsondict
str
None要发送的 JSON 数据,会自动设置 Content-Type 为'application/json'
headersdictNone请求头
cookiesdict
CookieJar
Nonecookies 信息
filesAnyNone要上传的文件,可以是一个字典,其中键是文件名,值是文件对象或文件路径
authAnyNone身份认证信息
allow_redirectsboolTrue是否允许重定向
proxiesdictNone代理信息
hooksAnyNone回调方法
streamboolNone是否使用流式传输
verifybool
str
None是否验证 SSL 证书
certstr
Tuple[str, str]
NoneSSL 客户端证书文件的路径(.pem 格式),或('cert', 'key')元组
返回类型说明
bool访问是否成功

示例:

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.get('https://DrissionPage.cn')

📌 post()

此方法用内置的Session对象以 POST 方式发送请求。

因为post()是使用requestspost()方法发送请求,参数和用法与requests一致。

此方法返回请求结果Response对象。

s 模式时,post()后结果还可用页面对象的htmljson属性获取。

参数名称类型默认值说明
urlstr必填目标 url,可指向本地文件路径
show_errmsgboolFalse连接出错时是否显示和抛出异常
retryintNone重试次数,为None时使用页面参数,默认3
intervalfloatNone重试间隔(秒),为None时使用页面参数,默认2
timeoutfloatNone加载超时时间(秒)
paramsdictNoneurl 请求参数
datadict
str
None携带的数据
jsondict
str
None要发送的 JSON 数据,会自动设置 Content-Type 为'application/json'
headersdictNone请求头
cookiesdict
CookieJar
Nonecookies 信息
filesAnyNone要上传的文件,可以是一个字典,其中键是文件名,值是文件对象或文件路径
authAnyNone身份认证信息
allow_redirectsboolTrue是否允许重定向
proxiesdictNone代理信息
hooksAnyNone回调方法
streamboolNone是否使用流式传输
verifybool
str
None是否验证 SSL 证书
certstr
Tuple[str, str]
NoneSSL 客户端证书文件的路径(.pem 格式),或('cert', 'key')元组
返回类型说明
Response获取到的Response对象

✅️️ 设置超时和重试

网络不稳定时,访问页面不一定成功,get()方法内置了超时和重试功能。通过retryintervaltimeout三个参数进行设置。
其中,如不指定timeout参数,该参数会使用ChromiumPagetimeouts属性的page_load参数中的值。

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.get('https://DrissionPage.cn', retry=1, interval=1, timeout=1.5)

✅️️ 加载模式

📌 概述

加载模式是指 d 模式下程序在页面加载阶段的行为模式,有以下三种:

  • normal():常规模式,会等待页面加载完毕,超时自动重试或停止,默认使用此模式
  • eager():加载完 DOM 或超时即停止加载,不加载页面资源
  • none():超时也不会自动停止,除非加载完成

前两种模式下,页面加载过程会阻塞程序,直到加载完毕才执行后面的操作。

none()模式下,只在连接阶段阻塞程序,加载阶段可自行根据情况执行stop_loading()停止加载。

这样提供给用户非常大的自由度,可等到关键数据包或元素出现就主动停止页面加载,大幅提升执行效率。

注意

加载完成是指主文档完成,并不包括由 js 触发的加载和重定向的加载。 当文档加载完成,程序就判断加载完毕,此后发生的重定向或 js 加载数据需用其它逻辑处理。

示例:

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.set.load_mode.eager() # 设置为eager模式
tab.get('https://DrissionPage.cn')

📌 模式设置

可通过 ini 文件、ChromiumOptions对象和页面对象的set.load_mode.****()方法进行设置。

运行时可随时动态设置。

配置对象中设置

from DrissionPage import ChromiumOptions, Chromium

co = ChromiumOptions().set_load_mode('none')
browser = Chromium(co)

运行中设置

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.set.load_mode.none()

📌 none模式技巧

示例 1,配合监听器

跟监听器配合,可在获取到需要的数据包时,主动停止加载。

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.set.load_mode.none() # 设置加载模式为none

tab.listen.start('api/getkeydata') # 指定监听目标并启动监听
tab.get('http://www.hao123.com/') # 访问网站
packet = tab.listen.wait() # 等待数据包
tab.stop_loading() # 主动停止加载
print(packet.response.body) # 打印数据包正文

示例 2,配合元素查找

跟元素查找配合,可在获取到某个指定元素时,主动停止加载。

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.set.load_mode.none() # 设置加载模式为none

tab.get('http://www.hao123.com/') # 访问网站
ele = tab.ele('中国日报') # 查找text包含“中国日报”的元素
tab.stop_loading() # 主动停止加载
print(ele.text) # 打印元素text

示例 2,配合页面特征

可等待到页面到达某种状态时,主动停止加载。比如多级跳转的登录,可等待 title 变化到最终目标网址时停止。

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.set.load_mode.none() # 设置加载模式为none

tab.get('http://www.hao123.com/') # 访问网站
tab.wait.title_change('hao123') # 等待title变化出现目标文本
tab.stop_loading() # 主动停止加载