DrissionPage 是一个基于 Python 的网页自动化工具,结合了 Selenium 和 requests 的优点,使用简单且功能强大。
pip install DrissionPage
# 自动下载 Chrome 驱动
from DrissionPage.common import download_driver
download_driver()
from DrissionPage import ChromiumPage, SessionPage
# 方式1:使用 ChromiumPage(类似 Selenium)
page = ChromiumPage() # 自动打开浏览器
# 方式2:使用 SessionPage(类似 requests)
session = SessionPage()
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()
# 多种定位方式
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)
# 输入文本
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()
# 隐式等待
page.set.timeouts(implicit=10)
# 显式等待
page.wait.ele_displayed('#result') # 等待元素显示
page.wait.ele_loaded('#loading') # 等待元素加载完成
page.wait.doc_loaded() # 等待文档加载完成
# 自定义条件等待
page.wait(lambda: page.title == '目标页面')
# 处理警告框
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')
# 执行 JS 代码
page.run_js('window.scrollTo(0, document.body.scrollHeight)')
result = page.run_js('return document.title')
# 切换到 iframe
frame = page.get_frame(0) # 第一个 iframe
frame.ele('#inner_element').click()
# 切换回主页面
page.switch_to.main_frame()
# 获取 Cookies
cookies = page.cookies()
# 添加 Cookie
page.cookies.add({'name': 'test', 'value': '123'})
# 清除 Cookies
page.cookies.clear()
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')
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()
# 推荐的做法
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')
# 执行操作...
# 页面会自动关闭
这个入门指南涵盖了 DrissionPage 的基本使用方法。要了解更多高级功能,请查阅官方文档:https://g1879.gitee.io/drissionpagedocs/