Chenerdy的幻想乡
首页文章归档风说书笔记说说友链项目相册关于
← 全部科目

Python爬虫

课次目录

00开篇01爬虫简介02Requests请求03正则04数据解析05selenium自动化06DrissionPage自动化
笔记/Python爬虫/第 06 课

Python爬虫笔记(06):DrissionPage自动化

2026-09-13 19:00:00

06-DrissionPage自动化

DrissionPage

DrissionPage 是一个基于 Python 的网页自动化库,结合了 Selenium 的浏览器控制能力和 requests 的高效网络请求功能,适用于爬虫、自动化测试和 RPA(机器人流程自动化)

安装: pip install DrissionPage 安装对应第三方模块

selenium和DrissionPage的区别

Selenium和DrissionPage都是用于Web自动化和数据采集的Python库, DrissionPage可以看作是Selenium的现代化改进版本,特别适合以数据采集为主要目的的场景。它解决了Selenium在速度和反检测方面的痛点,提供了更优雅的API。而Selenium在传统自动化测试领域仍然有其不可替代的地位,特别是需要严格遵循测试标准和跨浏览器测试的场景

Selenium

  • 主要进行Web应用功能测试
  • 支持多种浏览器
  • 团队熟悉Selenium

DrissionPage

  • 主要进行数据采集和爬虫开发
  • 需要绕过复杂的反爬机制
  • 追求更高的执行效率
  • 喜欢更简洁的API设计
  • 处理大量页面时关注资源消耗

基础使用

基础属性与方法

  • 标签对象.title属性: 获取网页的title标签内容
  • 标签对象.url属性: 获取网页的url信息
  • browser.quit(): 关闭浏览器
实例
# Chromium用于控制浏览器页面对象 from DrissionPage import Chromium# 连接浏览器browser = Chromium()  # 获取最新标签页对象tab = browser.latest_tab  # 访问网页tab.get('https://www.baidu.com')  # 获取当前页面的html源码print(tab.html) 

标签页管理

  • tab.close() 关闭当前页面

位置: 标签页管理

实例
# 标签页一 tabtab = browser.latest_tab  tab.get('https://www.baidu.com')  print(tab.title) # 获取网页的标题time.sleep(1.5)​# 标签页 新建一个标签页并访问网址tab2网页tab2 = browser.new_tab('https://www.taob.com') print(tab2.title) # 获取网页的标题​# 新建一个标签页并访问网址tab3 = browser.new_tab('https://drissionpage.cn/')  print(tab3.title)

get_tab() 通过浏览器对象 参数切换对应标签页面

标签页没有焦点的概念,多个标签页可以并行操作 , 不需要显示对应的页面也能操作

实例
browser = Chromium()  # 通过标签页索引进行获取dom = browser.get_tab(3)  # 注意是倒置的# 通过网页标题进行选择dom = browser.get_tab(title=tab1.title)# 通过网页地址进行选择dom = browser.get_tab(url=tab1.url)​​# 浏览器显示那个页面 这个序号是倒置的最前面的在最后面browser.activate_tab(browser.tab_ids[2])

管理单个页面的历史记录

实例
browser = Chromium() tab = browser.latest_tab  tab.get('https://www.baidu.com/')time.sleep(1)tab.get('https://www.taobao.com/')time.sleep(1)tab.get('https://www.jd.com/')​time.sleep(1)tab.back()    # 后退time.sleep(2.5)tab.forward()  # 前进

浏览器配置

  • 实例
    set_paths(browser_path,local_port,user_data_path)
    • browser_path: 浏览器可执行文件路径

    • local_port: 浏览器要使用的本地端口号

    • download_path: 下载文件默认保存路径

    • user_data_path: 用户数据文件夹路径

    • 实例
      options.set_user_data_path(path='')
      • 可以单独设置用户存储数据
  • 实例
    co1.set_timeouts(10, 10, 10)

    用于设置几种超时时间,单位为秒。

    • 'base': 默认值None, 超时时间,用于元素等待
    • 'page_load': 默认值None 页面加载超时时间
    • 'script': 默认值None 网络请求运行超时时间
实例
#  ChromiumOptions设置配置信息from DrissionPage import Chromium,ChromiumOptionsoptions = ChromiumOptions()# 无头模式 不显示浏览器'options.headless()  	 # 设置浏览器最大显示options.set_argument('--start-maximized')# 匿名模式 浏览器无痕模式options.incognito()# 禁用GPU加速,通常用于解决一些图形相关的问题,(减少内存使用)# 无头模式下的渲染兼容性问题options.set_argument("--disable-gpu")# 设置全局元素加载超时、页面超时和 网络请求超时各为 10 秒options.set_timeouts(10, 10, 10)# 禁用沙盒模式(提高权限)  在liunx系统中需要设置 解决权限不足导致的启动崩溃问题options.set_argument('--no-sandbox')  ​# 设置用户数据存储options.set_paths(local_port=9111, user_data_path=r'C:/Users/15116/Desktop/lianxi/userdata')# 设置用户数据存储options.set_user_data_path(path='')	options.set_local_port(port="9000")​# 以该配置创建浏览器页面对象page = Chromium(addr_or_opts=options).latest_tab

网页处理

查询元素

  • ele 用于查找其内部第一个符合条件的元素

  • 实例
    eles

    此方法与

    实例
    ele()

    相似,返回匹配到的所有元素组成的列表

    • timeout 等待元素出现的超时时间(秒)
原写法 简化写法 说明
@id # 表示 id 属性,简化写法只在语句最前面且单独使用时生效
@class . 表示 class 属性,简化写法只在语句最前面且单独使用时生效
text tx 按文本匹配
@text() @tx() 按文本查找,与 @ 或 @@ 配合使用时
tag t 按标签类型匹配
@tag() @t() 按元素名查找,与 @ 或 @@ 配合使用时
xpath x 用 xpath 方式查找元素
css c 用 css selector 方式查找元素

获取内容和属性

  • tag 此属性返回元素的标签名
  • text 此属性返回元素内所有文本组合成的字符串
  • link 此方法返回元素的href或src属性,没有对应属性则返回None
  • attr 此方法返回元素某个 attribute 属性值
  • attrs 此属性以字典形式返回元素所有属性及值

iframe内容

菜鸟教程的iframe通过ele可以直接获取

实例
# 本库可以直接查找同域` iframe `里面的元素 page.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")​dom = page.ele("#draggable")print(dom)

对于跨域的iframe,无法通过页面直接查找里面的元素,可以先获取到iframe 元素,再在其下查找

实例
tab = Chromium().latest_tabiframe = tab('#iframe1')ele = iframe('#abc')

等待

与全局超时进行互补,这是指定等待

实例
# 设置全局超时(后备保障)options.set_timeouts(10, 10, 10)# 先获取元素对象(可能此时元素尚未显示)element = page.ele('tag:div')# 此方法用于等待元素从隐藏状态变成显示状态 if element.wait.displayed(timeout=5):    print('元素已经显示')    # 进行后续操作,比如点击    element.click()
实例
# 页面操作...tab.get('https://example.com')# 对关键元素使用显式等待(更精确控制)if tab.wait.ele_displayed('tag:div', timeout=15):  # 可以覆盖全局设置    # 元素已显示,继续操作    element = tab.ele('tag:div')

交互元素

实例
# 引入按键交互  from DrissionPage.common import Keys# 输入内容text_input.input("美食")text_input.input((Keys.ENTER)) # 回车触发time.seep(2.5)text_input.clear()  #清空内容​# 组合键text_input.input((Keys.CTRL, 'a',))
实例
# 进行下拉到底部page.scroll.to_bottom()# 等待2stime.sleep(2)# 进行下拉到底部page.scroll.to_bottom()# 获取网页源码msg_data = page.htmlprint(msg_data)

点击

click和click.left用于左键点击元素。可选择模拟点击或 js 点击

默认点击是: 自动选择最佳点击方式 (此处可不讲)

参数名称 类型 默认值 说明
by_js bool False 指定点击行为方式。 为None时,如不被遮挡,用模拟点击,否则用 js 点击 ,为True时直接用 js 点击; 为False时强制模拟点击,被遮挡也会进行点击
timeout float 1.5 模拟点击的超时时间(秒),等待元素可见、可用、进入视口
wait_stop bool True 点击前是否等待元素停止运动
实例
# 获取点击元素but_page = page.ele('xpath://', timeout=2)# 进行点击but_page.click(by_js=None,timeout=3)but_page.click.left(by_js=None,timeout=3)

鼠标交互

实例
page.get('https://www.mi.com/shop')page = page.ele('xpath://*[@id="J_siteDownloadApp"]')# 悬停在元素中点tab_page.hover()
← Python爬虫笔记(05):selenium自动化

留言

目录