跳到主要内容

💥 4.2 功能介绍


🐞 测试版

4.2 目前处于测试阶段,欢迎试用。

pip install DrissionPage --pre --upgrade

反馈:https://gitcode.com/g1879/DrissionPage/issues
联系邮箱:DrissionPage@qq.com

作者 2024 年底开始非常忙碌,一年多没空推进开发。到 2026 年终于能抽出时间继续了。
但此时 AI 已变天,自动化工具不知道是否还有必要。
迷惘后决定还是继续前进,因为写程序本身是我的乐趣,不想失去,并且 AI 也给我带来了很大的便利。
在 AI 的大趋势下,自动化工具该怎么设计,希望大家留言交流。

✅️ 核心变化

📌 重构底层逻辑,优化资源占用

4.2 最大变化是对底层逻辑进行了全面重构,大幅降低内存占用,提升运行效率。

早期 DrissionPage 开发摸着石头过河,留下了一些顽疾,希望在这个版本能很好地解决。

由于对底层动了手术,需要大量测试才能保证稳定性。


📌 删除WebPage

为了使用逻辑更简洁,从 4.1 开始就想删除ChromiumPageWebPage,因已有大量项目在使用而保留。

为了后续发展(可能支持更多种类浏览器),统一使用体验,再三思考后决定进行优化。

先将WebPage功能合并到ChromiumPageMixTab功能合并到ChromiumTab

并在 IDE 提示中隐藏ChromiumPage的存在(实际仍可使用)。

请用Chromium()代替ChromiumPage()

✔️ 推荐写法:

from DrissionPage import Chromium

browser = Chromium()
tab = browser.latest_tab

❌️ 不推荐写法:

from DrissionPage import ChromiumPage

page = ChromiumPage()

✅️ 新功能

📌 支持直接获取跨域 iframe 内元素

现在可以直接用 tab 对象获取跨域<iframe>内的元素,而不用先获取元素对象了。

可用在此测试页面进行测试。

说明

此功能需用 DrissionPage 启动的浏览器,或使用'--disable-site-isolation-trials'参数启动的浏览器才能实现。

新版本:

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.get('https://drissionpage.cn/demos/iframe_diff_domain.html')
ele = tab('新闻')
print(ele)

旧版本

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.get('https://drissionpage.cn/demos/iframe_diff_domain.html')
iframe = tab.get_frame('t:iframe')
ele = iframe('新闻')
print(ele)

📌 支持跨域数据包监听

现在可以直接用 Tab 对象直接监听内部跨域<iframe>的数据包,而不用先获取元素。

说明

此功能需用 DrissionPage 启动的浏览器,或使用'--disable-site-isolation-trials'参数启动的浏览器才能实现。

新版本:

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.listen.start('https://www.163.com')
tab.get('https://drissionpage.cn/demos/iframe_diff_domain.html')
res = tab.listen.wait()
print(res)

旧版本:

from DrissionPage import Chromium

tab = Chromium().latest_tab
iframe = tab.get_frame('t:iframe')
iframe.listen.start('163.com')
iframe.get('https://www.163.com')
res = iframe.listen.wait()
print(res)

📌 增加'ax:'定位元素方法

新增'ax:'前缀的定位方法,支持无障碍模式定位。

无障碍模式是 Chrome 新增的功能,基于语义描述元素,更适合 AI 读取。

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.get('https://DrissionPage.cn')
ele = tab('ax:@name=主导航@role=navigation') # 在tab中定位
print(ele)
ele = ele('ax:@name=文档@role=link') # 在元素中获取
print(ele)
ele.click()

📌 动作链可显示运动轨迹

动作链增加show_trail()方法,可显示运动轨迹。

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.get('https://DrissionPage.cn')
ele = tab('ax:@name=文档@role=link')
tab.actions.show_trail()
tab.actions.move_to(ele).click()

📌 可创建隐藏的 Tab 对象

Chromium对象的new_tab()方法增加hidden参数,可创建隐藏的 tab。

from DrissionPage import Chromium

browser = Chromium()
tab = browser.new_tab(hidden=True)
tab.get('https://DrissionPage.cn')
print(tab.title)

📌 drag_in()方法可设置偏移量

drag_in()方法增加offset_xoffset_y参数,支持设置偏移量。


📌 ChromiumOptions增加remove_test_type()方法

为实现跨域监听和获取元素,使用了'--disable-site-isolation-trials'启动参数,未进行大规模测试。

如出现问题,启动浏览器时可用ChromiumOptionsremove_test_type()方法删除。

from DrissionPage import Chromium, ChromiumOptions

co = ChromiumOptions().remove_test_type()
browser = Chromium(co)

📌 ChromiumOptions可指定使用 edge

ChromiumOptionsset_browser_path()方法增加edge参数,可指定使用 edge 浏览器。

from DrissionPage import ChromiumOptions

co = ChromiumOptions().set_browser_path(edge=True)

✅️ API 和行为变化

  • ChromiumTabChromiumFrame删除reconnect()方法
  • click()方法点击元素随机位置
  • click()wait_stop参数默认改为False
  • console监听返回的结果更全面

✅️ 问题修复

  • 修复按键不兼容 MAC 问题
  • 修复 146+ 浏览器新页面获取到子<iframe>问题
  • 修复从 playwright 对象迁移时的问题
  • 修复下载等待没有判断超时前结束的问题
  • 修复drag_in()拖拽文件不正确问题
  • 修复若干小问题