跳到主要内容

💥 4.1 功能介绍


4.1 的最主要变化在于用Chromium对象替代ChromiumPageWebPage对象。

从 DrissionPage 诞生的时候开始,就存在DriverPageMixPage对象(后来的ChromiumPageWebPage)用于控制浏览器。

这是因为 DrissionPage 最开始是基于 selenium 开发的。

selenium 只能通过切换焦点的方式操作标签页,无法同时操作多个。

所以一个 Page 对象对应一个 Driver 对象就足够了。

但随着新版的开发,基于 selenium 的设计逐渐被替换,Page 对象作为最后的遗留,不足也日渐显现:

  • 它是浏览器和一个标签页的合体,在概念上不容易理解
  • 它在管理标签页的开关、查找时候容易造成混淆
  • 它代码结构臃肿,不利于后续功能开发

而它的唯一优点,是在创建的时候可以少写一行代码。

因此,在 4.1,会刻意淡化 Page 对象的存在感,而改用Chromium对象作为程序入口。

由于已有大量项目使用ChromiumPageWebPage进行开发,这两个对象仍然保留,功能不会有太大变化。

✅️ Chromium对象

Chromium对象用于连接浏览器,管理标签页和全局运行参数。

📌 连接浏览器

from DrissionPage import Chromium

browser = Chromium()

📌 标签页操作

from DrissionPage import Chromium

browser = Chromium()
tab1 = browser.latest_tab # 获取最后激活的标签页对象
tab2 = browser.get_tab(title='DrissionPage') # 获取指定标签页
tab3 = browser.new_tab() # 新建标签页
browser.activate_tab(tab2) # 将tab2提到最前面
tab1.close() # 关闭标签页

📌 浏览器操作

from DrissionPage import Chromium

browser = Chromium()
browser.set.cookies({'abc': '123'}) # 设置cookies
browser.set.download_path('C:\\tmp') # 设置下载路径
# 更多详见相关章节

✅️ api 变化

  • WebPageTab改名为MixTab
  • SessionPageChromiumPageWebPage初始化时删除timeout提示,以后会废弃
  • activate_tab()取代set.tab_to_front()
  • 所有对象增加find()方法,用于同时匹配多个定位符
  • 页面对象增加console属性,可读取控制台信息
  • Frame 对象增加set.property()set.style()link
  • Tab 对象的close()方法增加others参数
  • quit()增加del_data参数
  • cookies()删除as_dict参数,增加as_dict()as_jsonas_str()方法
  • 浏览器页面和元素对象的s_ele()s_eles()方法增加tiemout参数
  • 浏览器页面和元素对象增加rect.scroll_position属性
  • 元素对象增加get_frame()方法
  • 元素对象增加timeout属性
  • parent()和 shadow-root 内查找方法增加timeout参数
  • 动作链删除db_click(),各点击方法增加times参数
  • wait.new_tab()增加curr_tab参数
  • 滚动增加scroll()方法
  • ChromiumOptions增加new_env()方法,ini 文件增加new_env参数,用于指定必须用新环境
  • ChromiumOptions增加is_headless属性
  • auto_port()方法删除tmp_path参数
  • wait.alert_closed()增加timeout参数

✅️ 行为变化

  • Chromium只返回MixTab类型的标签页对象
  • ChromiumFrame对象默认改为单例
  • MixTabMixPagepost()方法必返回Response对象
  • 部分等待方法会返回调用者,方便链式操作
  • 元素对象各种动作返回元素本身,便于链式操作
  • 打印NoneElement改成详细信息
  • src()方法可获取<link>指向的文件内容
  • 录像改为 H.265 编码
  • shadow_root属性增加等待附加到元素(超时 10 秒)
  • set.cookies()忽略过期 cookie
  • timeout属性不再接受赋值

✅️ 优化和问题修复

  • 优化连接浏览器失败报错
  • 优化css_path
  • 修复new_tab()在访客模式和隐私模式的问题
  • 修复 Frame 对象滚动填入tuple定位符报错问题
  • 修复states.is_displayed有些情况下不正确问题
  • 修复元素link属性不正确的问题
  • 修复 shadow-root 内用 css 找元素的一个问题
  • 修复异域<iframe>内元素屏幕坐标不准问题
  • 修复new_tab=True时下载路径不正确问题
  • 修复attr()填入大写字母无法获取问题