欢迎光临石四片叶子网
详情描述
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/

相关帖子
为什么一到春天就容易感到困倦疲乏,背后的科学原理到底是什么?
为什么一到春天就容易感到困倦疲乏,背后的科学原理到底是什么?
宿州市住房公积金银行信用贷款代办公司#抵押贷款公司,附近银行信贷
宿州市住房公积金银行信用贷款代办公司#抵押贷款公司,附近银行信贷
宿州市品牌网站开发&手机app开发,优秀设计团队
宿州市品牌网站开发&手机app开发,优秀设计团队
宿州市汽车贷款押车-车抵贷门店,征信花了也可以办理
宿州市汽车贷款押车-车抵贷门店,征信花了也可以办理
宿州市房屋抵押贷款银行办理-上班族房产抵押贷款
宿州市房屋抵押贷款银行办理-上班族房产抵押贷款
如果发现自己的身份证被他人冒用,应该立即采取哪些措施?
如果发现自己的身份证被他人冒用,应该立即采取哪些措施?
陇南市垫资过桥银行贷款中介公司#全款房子银行抵押贷款,正规担保贷款公司
陇南市垫资过桥银行贷款中介公司#全款房子银行抵押贷款,正规担保贷款公司
渭南市住房一押二押贷款&房产抵押贷款额度,个人应急贷款
渭南市住房一押二押贷款&房产抵押贷款额度,个人应急贷款
未来的无障碍设施设计,将如何更好地兼顾老年人、孕妇、儿童等群体的需求?
未来的无障碍设施设计,将如何更好地兼顾老年人、孕妇、儿童等群体的需求?
温岭市应急信用贷款&车辆抵押贷款,房产银行二次抵押贷款
温岭市应急信用贷款&车辆抵押贷款,房产银行二次抵押贷款
共享经济模式下的收入分配,与传统的雇佣制有何根本不同?
共享经济模式下的收入分配,与传统的雇佣制有何根本不同?
绥化市汽车借款公司@房产抵押公司,应急信用贷款
绥化市汽车借款公司@房产抵押公司,应急信用贷款
当油表灯亮起,如何驾驶才能最大限度地延伸可行驶距离?
当油表灯亮起,如何驾驶才能最大限度地延伸可行驶距离?
临沂市车辆配件回收%本地二手车转让,快速上门电话
临沂市车辆配件回收%本地二手车转让,快速上门电话
湘潭市专业网站建设服务%企业获客助手,多年建站经验
湘潭市专业网站建设服务%企业获客助手,多年建站经验
嘉峪关市搬家服务电话-货物搬运,24小时在线咨询
嘉峪关市搬家服务电话-货物搬运,24小时在线咨询
在线预订酒店或机票时,被强制捆绑保险或接送服务,这种情况如何投诉?
在线预订酒店或机票时,被强制捆绑保险或接送服务,这种情况如何投诉?
有奖发票的奖金是如何设置和发放的,其资金来源是怎样的?
有奖发票的奖金是如何设置和发放的,其资金来源是怎样的?
关于婚姻登记“跨省通办”,2026年的政策适用范围和对象有何规定?
关于婚姻登记“跨省通办”,2026年的政策适用范围和对象有何规定?