当前位置: 首页 > ds >正文

【爬虫】DrissionPage-5

1. 官网文档

https://www.drissionpage.cn/browser_control/tabs

2. 获取标签页对象

DrissionPage 提供了多种方法来获取和管理标签页对象:

2.1 获取最后激活的标签页

使用 Chromium 对象的 latest_tab 属性可以获取最后激活的标签页对象。

from DrissionPage import Chromiumbrowser = Chromium()
tab = browser.latest_tab  # 获取最新标签页对象

注意:如果 Settings.singleton_tab_obj 设置为 True,则 latest_tab 返回的是标签页的 tab id

2.2 获取指定标签页

使用 get_tab()get_tabs() 方法可以根据不同条件获取指定的标签页对象。

  • 按序号获取

    tab1 = browser.get_tab(1)  # 获取列表中第一个标签页的对象
    
  • 按 ID 获取

    tab2 = browser.get_tab('5399F4ADFE3A27503FFAA56390344EE5')  # 获取指定 ID 的标签页对象
    
  • 按 URL 获取

    tab3 = browser.get_tab(url='DrissionPage.cn')  # 获取第一个 URL 中包含 'DrissionPage.cn' 的标签页对象
    tabs = browser.get_tabs(url='DrissionPage.cn')  # 获取所有 URL 中包含 'DrissionPage.cn' 的标签页对象
    

说明

  • id_or_num 不为 None 时,其他参数将失效。
  • titleurltab_type 三个参数之间是“与”的关系。
  • 传入的序号与标签页的视觉顺序不一定一致,而是按照激活顺序排列。
2.3 新建标签页并获取对象

使用 new_tab() 方法可以新建一个标签页,并返回其对象。

browser.new_tab(url='')  # 新建一个空白标签页

说明

  • 当传入 url 参数时,程序会根据 load_mode 设置访问页面,除了 none 模式外,都会等待页面加载完毕。
  • 如果需要新建多个标签页且不想等待,可以批量新建不传入 url 参数的标签页,然后遍历使用 get 方法。
2.4 获取点击后出现的标签页

在预期点击元素会出现新标签页时,可以使用元素的 click.for_new_tab() 方法进行点击,点击后会返回新标签页对象。

from DrissionPage import Chromiumtab = Chromium().latest_tab
tab.get('https://example.com')
ele = tab.ele('.wwads-cn wwads-horizontal').ele('tag:img')
if ele:tab2 = ele.click.for_new_tab()  # 点击并获取新标签页对象tab2.set.activate()ele2 = tab2.ele('确认访问', timeout=5)if ele2:ele2.wait(.5).click()
else:print('支持开源作者,请关闭广告屏蔽功能,谢谢。')

说明

  • click.middle() 方法可以使用中键点击 <a> 元素,强制在新标签页打开链接,并返回新标签页对象。
3. 多标签页协同

以下示例展示了如何在一个标签页中遍历列表元素,点击打开新标签页,获取信息后关闭。

from DrissionPage import Chromiumtab = Chromium().latest_tab
tab.get('https://example.com')links = tab.eles('t:h3')
for link in links[:-1]:# 点击链接并获取新标签页对象new_tab = link.click.for_new_tab()# 等待新标签页加载new_tab.wait.load_start()# 打印标签页标题print(new_tab.title)# 关闭新打开的标签页new_tab.close()
4. 使用多例模式

默认情况下,Tab 对象是单例的,即一个标签页只有一个对象,即使重复使用 get_tab(),获取的都是同一个对象。这主要是为了防止新手不理解机制,反复创建多个连接导致资源耗费。

如果需要允许多个 Tab 对象同时操作一个标签页,可以通过设置 Settings 来启用多例模式:

from DrissionPage.common import SettingsSettings.set_singleton_tab_obj(False)

示例

from DrissionPage import Chromium
from DrissionPage.common import Settingsbrowser = Chromium()
browser.new_tab()
browser.new_tab()# 未启用多例:
tab1 = browser.get_tab(1)
tab2 = browser.get_tab(1)
print(id(tab1), id(tab2))  # 输出相同的 ID# 启用多例:
Settings.set_singleton_tab_obj(False)
tab1 = browser.get_tab(1)
tab2 = browser.get_tab(1)
print(id(tab1), id(tab2))  # 输出不同的 ID

输出

2347582903056 2347582903056
2347588741840 2347588877712

可见,第一次输出两个 Tab 对象是同一个,第二次输出是独立的。

http://www.xdnf.cn/news/7072.html

相关文章:

  • 第九届御网杯大赛赛题资源加解题思路
  • 手撕I2C和SPI协议实现
  • 豆粕ETF投资逻辑整理归纳-20250511
  • Centos7.9同步外网yum源至内网
  • 山东大学计算机图形学期末复习9——CG12上
  • 【部署】读取excel批量导入dify的QA知识库
  • 【Changer解码头详解及融入neck层数据的实验设计】
  • Fidder基本操作
  • Spring Initializr快速创建项目案例
  • Spark,连接MySQL数据库,添加数据,读取数据
  • Foupk3systemX5OS邮箱上线通知
  • Cadence Allegro安装教程及指导
  • Almalinux中出现ens33 ethernet 未托管 -- lo loopback 未托管 --如何处理:
  • JWT令牌验证
  • 45、简述web.config⽂件中的重要节点
  • Leaflet使用SVG创建动态Legend
  • 文件读取漏洞路径与防御总结
  • AI日报 - 2024年5月17日
  • PyTorch实现三元组损失Triplet Loss
  • 风控域——风控决策引擎系统设计
  • 考研数学微分学(第三,四,五,六,七讲)
  • 【前端基础】HTML元素隐藏的四个方法(display设置为none、visibikity设置为hidden、rgba设置颜色、opacity设置透明度)
  • 软件设计师教程—— 第二章 程序设计语言基础知识(上)
  • Spatial Transformer Layer
  • Vue3学习(组合式API——ref模版引用与defineExpose编译宏函数)
  • 信贷域——互联网金融业务
  • 低空经济发展现状与前景
  • 聚集索引 vs. 非聚集索引
  • 恒大歌舞团全集
  • Android 14 解决打开app出现不兼容弹窗的问题