DrissionPage/docs/WebPage使用方法/3.6获取网页信息.md
2023-01-05 14:54:30 +00:00

6.0 KiB
Raw Blame History

页面对象共有以下几种:

  • WebPage:可在 s 和 d 模式之间切换,整合两种模式

  • ChromiumPage:单纯用于操作浏览器,工作于 d 模式

  • ChromiumTab:浏览器标签页对象,用于支持同时操作个多标签页

  • ChromiumFrame<iframe>元素对象,专门用于操作该元素

  • SessionPage:单纯用于收发数据包,工作于 s 模式

各种页面对象使用方法是一致的,以下用WebPage按两种模式介绍。d 模式包含 s模式所有属性。

ChromiumTabChromiumFrame具体用法将在后面章节单独介绍。

✔️ 运行状态信息

📍 url

此属性返回当前访问的 url两种模式均支持。

📍 address

此属性返回当前对象控制的页面地址和端口,仅用于 d 模式。

print(page.address)
# 输出127.0.0.1:9222

📍 tab_id

此属性返回当前标签页的 id仅用于 d 模式。

📍 mode

此属性返回当前页面对象的模式,'s''d'

📍 process_id

此属性返回浏览器进程 id仅用于 d 模式。

📍 is_loading

此属性返回页面是否正在加载状态,仅用于 d 模式。

📍 ready_state

此属性返回页面当前加载状态,有 3 种:'loading''interactive''complete',仅用于 d 模式。

📍 url_available

此属性以布尔值返回当前链接是否可用,两种模式均支持。

✔️ 窗口及页面信息

📍 size

此属性以tuple返回页面尺寸,仅用于 d 模式。格式:(宽度, 高度)。

📍 tabs_count

此属性返回当前浏览器标签页数量,仅用于 d 模式。

📍 tabs

此属性以列表形式返回当前浏览器所有标签页 id仅用于 d 模式。

📍 html

此属性返回当前页面 html 文本,两种模式均支持。

📍 json

此属性把请求内容解析成 json两种模式均支持。
比如请求接口时,返回内容是 json 格式,那就可以用这个属性获取。
事实上,用html属性获取也是可以的,不过html属性没有对文本进行解析。

📍 title

此属性返回当前页面title文本,两种模式均支持。

✔️ 配置参数信息

📍 timeout

s 模式下,此属性代表网络请求超时时间。
d 模式下,此属性为元素查找、点击、处理提示框等操作的超时时间。
默认为 10可对其赋值。

# 创建 MixPage 对象时指定
page = WebPage(timeout=5)

# 修改 timeout
page.timeout = 20

📍 timeouts

此属性以字典方式返回三种超时时间,仅用于 d 模式。
'implicit'用于元素查找、点击重试、输入文本重试、处理弹出框重试等;
'page_load'用于等待页面加载;
'script'用于等待脚本执行。

print(page.timeouts)

输出:

{'implicit': 10, 'pageLoad': 30.0, 'script': 30.0}

📍 retry_times

此属性为网络连接失败时的重试次数。默认为 3可对其赋值两种模式均支持。

# 修改重试次数
page.retry_times = 5

📍 retry_interval

此属性为网络连接失败时的重试等待间隔秒数。默认为 2可对其赋值两种模式均支持。

# 修改重试等待间隔时间
page.retry_interval = 1.5

📍 page_load_strategy

此属性返回页面加载策略,有 3 种:'none''normal''eager',仅用于 d 模式。

✔️ cookies 和缓存信息

📍 cookies

此属性以dict方式返回当前页面所使用的 cookies两种模式均支持。

📍 get_cookies()

此方法获取 cookies 并以 cookie 组成的list形式返回,两种模式均支持。

参数:

  • as_dict:是否以字典方式返回,为False返回 cookie 组成的list
  • all_domains:是否返回所有域的 cookies只有 s 模式下生效

返回: cookies 信息

from DrissionPage import WebPage

p = WebPage('s')
p.get('http://www.baidu.com')
p.get('http://gitee.com')

for i in p.get_cookies(as_dict=False, all_domains=True):
    print(i)

输出:

{'domain': '.baidu.com', 'domain_specified': True, ......}
......
{'domain': 'gitee.com', 'domain_specified': False, ......}
......

📍 get_session_storage()

此方法用于获取 sessionStorage 信息,可获取全部或单个项,仅用于 d 模式。

参数:

  • item:要获取的项,不设置则返回全部

返回: sessionStorage 一个或所有项内容

📍 get_local_storage()

此方法用于获取 localStorage 信息,可获取全部或单个项,仅用于 d 模式。

参数:

  • item:要获取的项,不设置则返回全部

返回: localStorage 一个或所有项内容

✔️ 内嵌对象

📍 session

此属性返回当前页面对象使用的Session对象,仅用于 s 模式。

📍 response

此属性为 s 模式请求网站后生成的Response对象,本库没实现的功能可直接获取此属性调用 requests 库的原生功能,仅用于 s 模式。

# 打印连接状态
r = page.response
print(r.status_code)

📍 driver

此属性返回当前页面对象使用的ChromiumDriver对象,仅用于 d 模式。

✔️ 页面截图

📍 get_screenshot()

此方法用于对页面进行截图可对整个网页、可见网页、指定范围截图。对可视范围外截图需要90以上版本浏览器支持仅用于 d 模式。

参数:

  • path:保存图片的完整路径,后缀可选'jpg''jpeg''png''webp'

  • as_bytes:是否已字节形式返回图片,可选'jpg''jpeg''png''webp'NoneTrue

  • full_page:是否整页截图,为True截取整个网页,为False截取可视窗口

  • left_top:截取范围左上角坐标

  • right_bottom:截取范围右下角角坐标

返回: 图片完整路径或字节文本

# 对整页截图并保存
page.get_screenshot(path='D:\\page.png', full_page=True)