Python實現(xiàn)自動化表單填寫功能
1. Selenium
簡介
Selenium 是一個功能強大的瀏覽器自動化工具,支持多種瀏覽器(如Chrome、Firefox、Edge等)。它可以模擬用戶操作,如點擊按鈕、填寫表單、處理JavaScript動態(tài)內容等。
適用場景
- 需要與頁面進行復雜交互(如點擊按鈕、選擇下拉菜單)。
- 需要處理JavaScript動態(tài)加載的內容。
- 需要跨瀏覽器測試。
示例代碼
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()
優(yōu)點
- 支持多種瀏覽器。
- 功能強大,可以處理復雜的交互和動態(tài)內容。
缺點
- 需要安裝瀏覽器驅動。
- 執(zhí)行速度較慢。
2. Playwright
簡介
Playwright 是一個現(xiàn)代化的瀏覽器自動化工具,支持Chromium、Firefox和WebKit瀏覽器。它比Selenium更高效,API也更豐富。
適用場景
- 需要處理復雜的JavaScript動態(tài)內容。
- 需要跨瀏覽器測試。
- 需要高效的自動化操作。
示例代碼
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()
優(yōu)點
- 支持多種瀏覽器。
- 執(zhí)行速度快,API豐富。
- 可以處理復雜的交互和動態(tài)內容。
缺點
- 需要安裝瀏覽器驅動。
- 學習曲線略高。
3. Requests + BeautifulSoup
簡介
requests 是一個HTTP庫,用于發(fā)送HTTP請求。BeautifulSoup 是一個HTML解析庫,用于提取網(wǎng)頁中的數(shù)據(jù)。結合兩者可以實現(xiàn)簡單的表單提交。
適用場景
- 靜態(tài)網(wǎng)頁(沒有JavaScript動態(tài)加載內容)。
- 表單提交是通過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']
# 構造表單數(shù)據(jù)
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('表單提交失??!')
優(yōu)點
- 輕量級,不需要啟動瀏覽器。
- 適合處理簡單的表單提交。
缺點
- 無法處理JavaScript動態(tài)內容。
- 無法模擬復雜的用戶交互。
4. MechanicalSoup
簡介
MechanicalSoup 是一個基于requests和BeautifulSoup的庫,專門用于自動化表單提交。它比純requests更簡單易用。
適用場景
- 簡單的表單提交任務。
- 不需要處理JavaScript動態(tài)內容。
示例代碼
import mechanicalsoup
# 創(chuàng)建瀏覽器對象
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('表單提交失??!')
優(yōu)點
- 簡單易用,適合快速實現(xiàn)表單提交。
- 不需要啟動瀏覽器。
缺點
- 無法處理JavaScript動態(tài)內容。
- 功能相對有限。
5. Pyppeteer
簡介
Pyppeteer 是一個Python版的Puppeteer,用于控制無頭瀏覽器(Headless Chrome)。它類似于Playwright,但更專注于Chromium瀏覽器。
適用場景
- 需要處理復雜的JavaScript動態(tài)內容。
- 需要無頭瀏覽器支持。
示例代碼
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())
優(yōu)點
- 支持無頭瀏覽器。
- 可以處理復雜的交互和動態(tài)內容。
缺點
- 需要異步編程。
- 僅支持Chromium瀏覽器。
6. RoboBrowser
簡介
RoboBrowser 是一個簡單的庫,結合了requests和BeautifulSoup,適合快速實現(xiàn)表單提交。
適用場景
- 簡單的表單提交任務。
- 不需要處理JavaScript動態(tài)內容。
示例代碼
from robobrowser import RoboBrowser
# 創(chuàng)建瀏覽器對象
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('表單提交失敗!')
優(yōu)點
- 簡單易用。
- 不需要啟動瀏覽器。
缺點
- 無法處理JavaScript動態(tài)內容。
- 功能有限。
橫向比較
| 工具 | 是否需要瀏覽器 | 是否支持JavaScript | 是否支持多瀏覽器 | 學習曲線 | 適用場景 |
|---|---|---|---|---|---|
| Selenium | 是 | 是 | 是 | 中等 | 復雜交互、跨瀏覽器測試 |
| Playwright | 是 | 是 | 是 | 中等 | 復雜交互、高效自動化 |
| Requests + BS4 | 否 | 否 | 否 | 低 | 簡單表單提交 |
| MechanicalSoup | 否 | 否 | 否 | 低 | 簡單表單提交 |
| Pyppeteer | 是 | 是 | 否(僅Chromium) | 中等 | 復雜交互、無頭瀏覽器支持 |
| RoboBrowser | 否 | 否 | 否 | 低 | 簡單表單提交 |
總結
- 如果需要處理復雜的交互和動態(tài)內容,推薦使用
Playwright或Selenium。 - 如果只需要簡單的表單提交,可以使用
MechanicalSoup或RoboBrowser。 - 如果不想啟動瀏覽器,可以使用
requests+BeautifulSoup。
以上就是Python實現(xiàn)自動化表單填寫功能的詳細內容,更多關于Python自動化表單填寫的資料請關注腳本之家其它相關文章!
相關文章
Python實現(xiàn) 多進程導入CSV數(shù)據(jù)到 MySQL
本文給大家分享的是使用python實現(xiàn)多進程導入CSV文件數(shù)據(jù)到MySQL的思路方法以及具體的代碼分享,有相同需求的小伙伴可以參考下2017-02-02

