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自动化表单填写的资料请关注代码网其它相关文章!
发表评论