BotBrowser-自动化浏览器
BotBrowser 是一个开源的自动化浏览器工具,基于Chromium内核构建。它提供了强大的自动化能力,支持网页操作、数据抓取、表单填写、截图等功能,是Web自动化的理想选择。
主要特性
🤖 自动化能力
- 网页操作: 点击、输入、滚动、拖拽等操作
- 元素定位: 支持XPath、CSS选择器、ID等多种定位方式
- 等待机制: 智能等待页面加载和元素出现
- 事件处理: 支持各种浏览器事件监听和处理
📊 数据抓取
- 内容提取: 自动提取网页文本、图片、链接等
- 表格数据: 支持表格数据的结构化提取
- API调用: 支持RESTful API的自动化调用
- 数据导出: 支持CSV、JSON、Excel等格式导出
🔧 高级功能
- 多标签页: 支持多标签页同时操作
- Cookie管理: 自动管理浏览器Cookie和会话
- 代理支持: 支持HTTP、SOCKS代理
- 截图录制: 支持页面截图和操作录制
🌐 跨平台支持
- 桌面端: Windows、macOS、Linux
- 服务端: 支持无头模式运行
- Docker: 支持容器化部署
- 云服务: 支持云端自动化
项目地址
BotBrowser - Github BotBrowser - 文档安装配置
1. 下载安装
# 从GitHub下载最新版本
# 访问 https://github.com/botbrowser/botbrowser/releases
# Windows用户
# 下载 .exe 安装包
# macOS用户
# 下载 .dmg 安装包
# Linux用户
# 下载 .AppImage 或 .deb 包
2. Python SDK安装
# 安装Python SDK
pip install botbrowser
# 或者从源码安装
git clone https://github.com/botbrowser/botbrowser-python.git
cd botbrowser-python
pip install -e .
3. Docker部署
# 拉取镜像
docker pull botbrowser/botbrowser:latest
# 运行容器
docker run -d \
--name botbrowser \
-p 9222:9222 \
-v /tmp/botbrowser:/data \
botbrowser/botbrowser:latest
# 使用Docker Compose
version: '3'
services:
botbrowser:
image: botbrowser/botbrowser:latest
ports:
- "9222:9222"
volumes:
- ./data:/data
environment:
- DISPLAY=:99
基础配置
1. 浏览器配置
# 基础配置示例
from botbrowser import BotBrowser
browser = BotBrowser(
headless=False, # 是否无头模式
window_size=(1920, 1080), # 窗口大小
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
proxy="http://proxy.example.com:8080", # 代理设置
timeout=30 # 超时时间
)
2. 自动化脚本
# 简单的自动化脚本
async def login_example():
browser = BotBrowser()
# 打开网页
await browser.goto("https://example.com/login")
# 填写表单
await browser.fill("#username", "your_username")
await browser.fill("#password", "your_password")
# 点击登录按钮
await browser.click("#login-btn")
# 等待页面加载
await browser.wait_for_selector(".dashboard")
# 截图
await browser.screenshot("login_success.png")
await browser.close()
3. 数据抓取
# 数据抓取示例
async def scrape_data():
browser = BotBrowser()
await browser.goto("https://example.com/products")
# 提取产品信息
products = await browser.query_selector_all(".product-item")
data = []
for product in products:
name = await product.query_selector(".product-name").text_content()
price = await product.query_selector(".product-price").text_content()
data.append({
"name": name,
"price": price
})
# 导出数据
import json
with open("products.json", "w") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
await browser.close()
高级功能
1. 智能等待
# 智能等待示例
async def smart_wait():
browser = BotBrowser()
await browser.goto("https://example.com")
# 等待元素出现
await browser.wait_for_selector("#dynamic-content", timeout=10000)
# 等待元素消失
await browser.wait_for_selector("#loading", state="hidden")
# 等待网络请求完成
await browser.wait_for_load_state("networkidle")
# 等待JavaScript执行完成
await browser.wait_for_function("document.readyState === 'complete'")
2. 事件监听
# 事件监听示例
async def event_listener():
browser = BotBrowser()
# 监听网络请求
async def handle_request(request):
print(f"Request: {request.url}")
browser.on("request", handle_request)
# 监听响应
async def handle_response(response):
if response.status == 404:
print(f"404 Error: {response.url}")
browser.on("response", handle_response)
await browser.goto("https://example.com")
3. 多标签页管理
# 多标签页示例
async def multi_tabs():
browser = BotBrowser()
# 创建新标签页
page1 = await browser.new_page()
page2 = await browser.new_page()
# 并行操作多个标签页
await asyncio.gather(
page1.goto("https://example1.com"),
page2.goto("https://example2.com")
)
# 切换标签页
await browser.bring_to_front(page1)
# 关闭标签页
await page1.close()
使用场景
1. 数据抓取
# 数据抓取场景
适用场景:
- 电商数据抓取
- 新闻内容采集
- 社交媒体监控
- 价格比较分析
功能:
- 批量数据提取
- 定时任务执行
- 数据清洗处理
- 结果导出分析
2. 自动化测试
# 自动化测试场景
适用场景:
- Web应用测试
- 回归测试
- 性能测试
- 兼容性测试
功能:
- 测试用例执行
- 测试报告生成
- 错误截图保存
- 持续集成支持
3. 业务流程自动化
# 业务流程自动化
适用场景:
- 订单处理
- 客户服务
- 内容发布
- 系统监控
功能:
- 流程自动化
- 异常处理
- 日志记录
- 结果通知
性能优化
1. 资源管理
# 资源优化配置
browser = BotBrowser(
# 禁用图片加载
images_enabled=False,
# 禁用CSS
css_enabled=False,
# 禁用JavaScript
javascript_enabled=False,
# 设置缓存
cache_enabled=True,
# 限制并发请求
max_concurrent_requests=10
)
2. 内存优化
# 内存优化示例
async def memory_optimized():
browser = BotBrowser()
try:
# 定期清理内存
await browser.evaluate("""
if (window.gc) {
window.gc();
}
""")
# 清理缓存
await browser.clear_cache()
finally:
await browser.close()
3. 并发控制
# 并发控制示例
import asyncio
from asyncio import Semaphore
async def controlled_scraping(urls, max_concurrent=5):
semaphore = Semaphore(max_concurrent)
async def scrape_url(url):
async with semaphore:
browser = BotBrowser()
try:
await browser.goto(url)
# 执行抓取逻辑
return await extract_data(browser)
finally:
await browser.close()
tasks = [scrape_url(url) for url in urls]
return await asyncio.gather(*tasks)
常见问题
Q: 如何处理反爬虫机制?
A: 使用随机User-Agent、代理IP、请求间隔、Cookie管理等方式绕过反爬虫检测。
Q: 如何提高抓取效率?
A: 使用并发控制、资源优化、智能等待、缓存机制等方法提高效率。
Q: 如何处理动态加载内容?
A: 使用wait_for_selector、wait_for_function等方法等待动态内容加载完成。
Q: 如何保存登录状态?
A: 使用Cookie管理、会话保存、状态持久化等方式保存登录状态。
总结
BotBrowser 是一个功能强大的自动化浏览器工具,具有以下优势:
- ✅ 完全免费开源
- ✅ 功能强大
- ✅ 易于使用
- ✅ 跨平台支持
- ✅ 性能优异
- ✅ 扩展性强
BotBrowser 特别适合需要Web自动化的开发者和企业用户。
使用BotBrowser时请遵守网站的robots.txt和使用条款,合理使用自动化功能。