宿州市文章资讯

Python使用DrissionPage实现自动化处理的简单入门指南

2026-04-17 22:58:01 浏览次数:0
详细信息

DrissionPage Python 自动化入门指南

DrissionPage 是一个基于 Python 的网页自动化工具,结合了 Selenium 和 requests 的优点,使用简单且功能强大。

一、安装与环境配置

1. 安装 DrissionPage

pip install DrissionPage

2. 安装浏览器驱动(可选)

# 自动下载 Chrome 驱动
from DrissionPage.common import download_driver
download_driver()

二、基本使用

1. 创建页面对象

from DrissionPage import ChromiumPage, SessionPage

# 方式1:使用 ChromiumPage(类似 Selenium)
page = ChromiumPage()  # 自动打开浏览器

# 方式2:使用 SessionPage(类似 requests)
session = SessionPage()

2. 基础操作示例

from DrissionPage import ChromiumPage

# 创建页面对象
page = ChromiumPage()

# 访问网页
page.get('https://www.baidu.com')

# 定位元素并输入文本
page.ele('#kw').input('DrissionPage')

# 点击搜索按钮
page.ele('#su').click()

# 等待页面加载
page.wait.load_start()

# 获取页面标题
print(page.title)

# 获取元素文本
element = page.ele('tag:h2')
print(element.text)

# 截图
page.get_screenshot(path='screenshot.png')

# 关闭浏览器
page.quit()

三、元素定位与操作

1. 元素定位方法

# 多种定位方式
page.ele('#id_value')  # CSS选择器
page.ele('xpath://div[@class="example"]')  # XPath
page.ele('tag:div')  # 标签名
page.ele('text:登录')  # 文本内容
page.ele('@placeholder:请输入用户名')  # 属性

# 多个元素
elements = page.eles('tag:li')
for ele in elements:
    print(ele.text)

2. 元素操作

# 输入文本
page.ele('#username').input('test_user')

# 点击
page.ele('text:提交').click()

# 获取属性
href = page.ele('tag:a').attr('href')

# 下拉选择
select_ele = page.ele('tag:select')
select_ele.select('选项1')

# 鼠标悬停
page.ele('#menu').hover()

四、等待与弹窗处理

1. 等待机制

# 隐式等待
page.set.timeouts(implicit=10)

# 显式等待
page.wait.ele_displayed('#result')  # 等待元素显示
page.wait.ele_loaded('#loading')  # 等待元素加载完成
page.wait.doc_loaded()  # 等待文档加载完成

# 自定义条件等待
page.wait(lambda: page.title == '目标页面')

2. 处理弹窗

# 处理警告框
page.listen.start('alert')  # 开始监听弹窗
alert = page.listen.wait()  # 等待弹窗出现
print(alert.text)  # 获取弹窗文本
alert.accept()  # 确认

# 处理确认框
page.listen.start('confirm')
confirm = page.listen.wait()
confirm.dismiss()  # 取消

五、表单操作

# 填写表单
form = page.ele('tag:form')
form.ele('#name').input('张三')
form.ele('#email').input('zhangsan@example.com')

# 选择单选框
form.ele('@value:option1').click()

# 选择复选框
form.ele('@type:checkbox').click()

# 文件上传
form.ele('@type:file').input(r'C:\path\to\file.txt')

# 提交表单
form.ele('@type:submit').click()

六、选项卡和窗口管理

# 新建选项卡
page.new_tab(url='https://www.example.com')

# 切换选项卡
page.to_tab(1)  # 切换到第二个选项卡

# 关闭当前选项卡
page.close_tabs()

# 获取所有选项卡
tabs = page.tabs
for tab in tabs:
    print(tab.title)

# 新建窗口
page.new_window(url='https://www.example2.com')

七、实用技巧

1. 执行 JavaScript

# 执行 JS 代码
page.run_js('window.scrollTo(0, document.body.scrollHeight)')
result = page.run_js('return document.title')

2. 处理 iframe

# 切换到 iframe
frame = page.get_frame(0)  # 第一个 iframe
frame.ele('#inner_element').click()

# 切换回主页面
page.switch_to.main_frame()

3. Cookies 操作

# 获取 Cookies
cookies = page.cookies()

# 添加 Cookie
page.cookies.add({'name': 'test', 'value': '123'})

# 清除 Cookies
page.cookies.clear()

八、完整示例

示例1:自动化登录

from DrissionPage import ChromiumPage

def login_to_website(username, password):
    page = ChromiumPage()

    try:
        # 访问登录页面
        page.get('https://example.com/login')

        # 输入用户名密码
        page.ele('#username').input(username)
        page.ele('#password').input(password)

        # 点击登录
        page.ele('@type:submit').click()

        # 等待登录成功
        page.wait.ele_displayed('#welcome')

        print('登录成功!')

        # 做一些其他操作...
        # ...

    except Exception as e:
        print(f'登录失败: {e}')

    finally:
        page.quit()

# 使用示例
login_to_website('your_username', 'your_password')

示例2:数据抓取

from DrissionPage import SessionPage
import pandas as pd

def scrape_data():
    session = SessionPage()
    session.get('https://quotes.toscrape.com/')

    data = []

    # 获取所有引用卡片
    quotes = session.eles('tag:div@class:quote')

    for quote in quotes:
        text = quote.ele('tag:span@class:text').text
        author = quote.ele('tag:small@class:author').text
        tags = [tag.text for tag in quote.eles('tag:a@class:tag')]

        data.append({
            'quote': text,
            'author': author,
            'tags': ', '.join(tags)
        })

    # 转换为 DataFrame
    df = pd.DataFrame(data)
    df.to_csv('quotes.csv', index=False, encoding='utf-8')
    print(f'成功抓取 {len(data)} 条数据')

scrape_data()

九、最佳实践

异常处理:始终使用 try-except 处理可能出现的异常 资源管理:使用 with 语句确保资源正确释放 配置选项:根据需求调整浏览器配置 元素等待:避免使用 sleep,使用内置的等待方法 代码复用:将常用操作封装成函数或类
# 推荐的做法
from DrissionPage import ChromiumOptions, ChromiumPage

# 配置浏览器选项
co = ChromiumOptions()
co.set_argument('--headless')  # 无头模式
co.set_argument('--disable-gpu')

# 使用上下文管理器
with ChromiumPage(chromium_options=co) as page:
    page.get('https://example.com')
    # 执行操作...
    # 页面会自动关闭

十、常见问题

驱动问题:确保 Chrome 版本与驱动匹配 元素定位失败:检查元素是否在 iframe 中或需要等待加载 性能问题:对于大量页面,考虑使用 SessionPage 反爬虫:合理设置请求头,添加延迟,使用代理

这个入门指南涵盖了 DrissionPage 的基本使用方法。要了解更多高级功能,请查阅官方文档:https://g1879.gitee.io/drissionpagedocs/

相关推荐