1. selenium
简介
selenium 是一个功能强大的浏览器自动化工具,支持多种浏览器(如chrome、firefox、edge等)。它可以模拟用户操作,如点击按钮、填写表单、处理javascript动态内容等。
适用场景
- 需要与页面进行复杂交互(如点击按钮、选择下拉菜单)。
- 需要处理javascript动态加载的内容。
- 需要跨浏览器测试。
示例代码
from selenium import webdriver
from selenium.webdriver.common.by import by
import time
# 启动浏览器
driver = webdriver.chrome(executable_path='path/to/chromedriver')
# 打开表单页面
driver.get('https://example.com/form')
# 填写表单
driver.find_element(by.name, 'username').send_keys('john doe')
driver.find_element(by.name, 'email').send_keys('johndoe@example.com')
driver.find_element(by.name, 'password').send_keys('securepassword123')
# 提交表单
driver.find_element(by.xpath, '//button[@type="submit"]').click()
# 关闭浏览器
time.sleep(5)
driver.quit()
优点
- 支持多种浏览器。
- 功能强大,可以处理复杂的交互和动态内容。
缺点
- 需要安装浏览器驱动。
- 执行速度较慢。
2. playwright
简介
playwright 是一个现代化的浏览器自动化工具,支持chromium、firefox和webkit浏览器。它比selenium更高效,api也更丰富。
适用场景
- 需要处理复杂的javascript动态内容。
- 需要跨浏览器测试。
- 需要高效的自动化操作。
示例代码
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# 启动浏览器
browser = p.chromium.launch(headless=false)
page = browser.new_page()
# 打开表单页面
page.goto('https://example.com/form')
# 填写表单
page.fill('input[name="username"]', 'john doe')
page.fill('input[name="email"]', 'johndoe@example.com')
page.fill('input[name="password"]', 'securepassword123')
page.click('input[type="submit"]')
# 关闭浏览器
browser.close()
优点
- 支持多种浏览器。
- 执行速度快,api丰富。
- 可以处理复杂的交互和动态内容。
缺点
- 需要安装浏览器驱动。
- 学习曲线略高。
3. requests + beautifulsoup
简介
requests 是一个http库,用于发送http请求。beautifulsoup 是一个html解析库,用于提取网页中的数据。结合两者可以实现简单的表单提交。
适用场景
- 静态网页(没有javascript动态加载内容)。
- 表单提交是通过http post/get请求完成的。
示例代码
import requests
from bs4 import beautifulsoup
# 获取表单页面
session = requests.session()
response = session.get('https://example.com/form')
soup = beautifulsoup(response.text, 'html.parser')
# 提取csrf令牌
csrf_token = soup.find('input', {'name': 'csrf_token'})['value']
# 构造表单数据
form_data = {
'username': 'john doe',
'email': 'johndoe@example.com',
'password': 'securepassword123',
'csrf_token': csrf_token
}
# 提交表单
response = session.post('https://example.com/submit', data=form_data)
# 检查提交结果
if response.status_code == 200:
print('表单提交成功!')
else:
print('表单提交失败!')
优点
- 轻量级,不需要启动浏览器。
- 适合处理简单的表单提交。
缺点
- 无法处理javascript动态内容。
- 无法模拟复杂的用户交互。
4. mechanicalsoup
简介
mechanicalsoup 是一个基于requests和beautifulsoup的库,专门用于自动化表单提交。它比纯requests更简单易用。
适用场景
- 简单的表单提交任务。
- 不需要处理javascript动态内容。
示例代码
import mechanicalsoup
# 创建浏览器对象
browser = mechanicalsoup.browser()
# 打开表单页面
page = browser.get('https://example.com/form')
form = page.soup.select_one('form')
# 填写表单
form.select_one('input[name="username"]')['value'] = 'john doe'
form.select_one('input[name="email"]')['value'] = 'johndoe@example.com'
form.select_one('input[name="password"]')['value'] = 'securepassword123'
# 提交表单
response = browser.submit(form, page.url)
# 检查提交结果
if response.status_code == 200:
print('表单提交成功!')
else:
print('表单提交失败!')
优点
- 简单易用,适合快速实现表单提交。
- 不需要启动浏览器。
缺点
- 无法处理javascript动态内容。
- 功能相对有限。
5. pyppeteer
简介
pyppeteer 是一个python版的puppeteer,用于控制无头浏览器(headless chrome)。它类似于playwright,但更专注于chromium浏览器。
适用场景
- 需要处理复杂的javascript动态内容。
- 需要无头浏览器支持。
示例代码
import asyncio
from pyppeteer import launch
async def fill_form():
# 启动浏览器
browser = await launch(headless=false)
page = await browser.newpage()
# 打开表单页面
await page.goto('https://example.com/form')
# 填写表单
await page.type('input[name="username"]', 'john doe')
await page.type('input[name="email"]', 'johndoe@example.com')
await page.type('input[name="password"]', 'securepassword123')
await page.click('input[type="submit"]')
# 关闭浏览器
await browser.close()
# 运行异步任务
asyncio.get_event_loop().run_until_complete(fill_form())
优点
- 支持无头浏览器。
- 可以处理复杂的交互和动态内容。
缺点
- 需要异步编程。
- 仅支持chromium浏览器。
6. robobrowser
简介
robobrowser 是一个简单的库,结合了requests和beautifulsoup,适合快速实现表单提交。
适用场景
- 简单的表单提交任务。
- 不需要处理javascript动态内容。
示例代码
from robobrowser import robobrowser
# 创建浏览器对象
browser = robobrowser()
# 打开表单页面
browser.open('https://example.com/form')
# 获取表单
form = browser.get_form()
# 填写表单
form['username'].value = 'john doe'
form['email'].value = 'johndoe@example.com'
form['password'].value = 'securepassword123'
# 提交表单
browser.submit_form(form)
# 检查提交结果
if browser.response.status_code == 200:
print('表单提交成功!')
else:
print('表单提交失败!')
优点
- 简单易用。
- 不需要启动浏览器。
缺点
- 无法处理javascript动态内容。
- 功能有限。
横向比较
| 工具 | 是否需要浏览器 | 是否支持javascript | 是否支持多浏览器 | 学习曲线 | 适用场景 |
|---|---|---|---|---|---|
| selenium | 是 | 是 | 是 | 中等 | 复杂交互、跨浏览器测试 |
| playwright | 是 | 是 | 是 | 中等 | 复杂交互、高效自动化 |
| requests + bs4 | 否 | 否 | 否 | 低 | 简单表单提交 |
| mechanicalsoup | 否 | 否 | 否 | 低 | 简单表单提交 |
| pyppeteer | 是 | 是 | 否(仅chromium) | 中等 | 复杂交互、无头浏览器支持 |
| robobrowser | 否 | 否 | 否 | 低 | 简单表单提交 |
总结
- 如果需要处理复杂的交互和动态内容,推荐使用
playwright或selenium。 - 如果只需要简单的表单提交,可以使用
mechanicalsoup或robobrowser。 - 如果不想启动浏览器,可以使用
requests+beautifulsoup。
以上就是python实现自动化表单填写功能的详细内容,更多关于python自动化表单填写的资料请关注代码网其它相关文章!
发表评论