欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 【爬虫】DrissionPage-5

【爬虫】DrissionPage-5

2025/5/20 10:59:47 来源:https://blog.csdn.net/2401_83769134/article/details/148027969  浏览:    关键词:【爬虫】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 对象是同一个,第二次输出是独立的。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词