Python實現(xiàn)自動化表單填寫功能
1. Selenium
簡介
Selenium 是一個功能強大的瀏覽器自動化工具,支持多種瀏覽器(如Chrome、Firefox、Edge等)。它可以模擬用戶操作,如點擊按鈕、填寫表單、處理JavaScript動態(tài)內(nèi)容等。
適用場景
- 需要與頁面進行復(fù)雜交互(如點擊按鈕、選擇下拉菜單)。
- 需要處理JavaScript動態(tài)加載的內(nè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()
# 關(guān)閉瀏覽器
time.sleep(5)
driver.quit()
優(yōu)點
- 支持多種瀏覽器。
- 功能強大,可以處理復(fù)雜的交互和動態(tài)內(nèi)容。
缺點
- 需要安裝瀏覽器驅(qū)動。
- 執(zhí)行速度較慢。
2. Playwright
簡介
Playwright 是一個現(xiàn)代化的瀏覽器自動化工具,支持Chromium、Firefox和WebKit瀏覽器。它比Selenium更高效,API也更豐富。
適用場景
- 需要處理復(fù)雜的JavaScript動態(tài)內(nè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"]')
# 關(guān)閉瀏覽器
browser.close()
優(yōu)點
- 支持多種瀏覽器。
- 執(zhí)行速度快,API豐富。
- 可以處理復(fù)雜的交互和動態(tài)內(nèi)容。
缺點
- 需要安裝瀏覽器驅(qū)動。
- 學(xué)習(xí)曲線略高。
3. Requests + BeautifulSoup
簡介
requests 是一個HTTP庫,用于發(fā)送HTTP請求。BeautifulSoup 是一個HTML解析庫,用于提取網(wǎng)頁中的數(shù)據(jù)。結(jié)合兩者可以實現(xiàn)簡單的表單提交。
適用場景
- 靜態(tài)網(wǎng)頁(沒有JavaScript動態(tài)加載內(nè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']
# 構(gòu)造表單數(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)
# 檢查提交結(jié)果
if response.status_code == 200:
print('表單提交成功!')
else:
print('表單提交失?。?)
優(yōu)點
- 輕量級,不需要啟動瀏覽器。
- 適合處理簡單的表單提交。
缺點
- 無法處理JavaScript動態(tài)內(nèi)容。
- 無法模擬復(fù)雜的用戶交互。
4. MechanicalSoup
簡介
MechanicalSoup 是一個基于requests和BeautifulSoup的庫,專門用于自動化表單提交。它比純requests更簡單易用。
適用場景
- 簡單的表單提交任務(wù)。
- 不需要處理JavaScript動態(tài)內(nè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)
# 檢查提交結(jié)果
if response.status_code == 200:
print('表單提交成功!')
else:
print('表單提交失??!')
優(yōu)點
- 簡單易用,適合快速實現(xiàn)表單提交。
- 不需要啟動瀏覽器。
缺點
- 無法處理JavaScript動態(tài)內(nèi)容。
- 功能相對有限。
5. Pyppeteer
簡介
Pyppeteer 是一個Python版的Puppeteer,用于控制無頭瀏覽器(Headless Chrome)。它類似于Playwright,但更專注于Chromium瀏覽器。
適用場景
- 需要處理復(fù)雜的JavaScript動態(tài)內(nè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"]')
# 關(guān)閉瀏覽器
await browser.close()
# 運行異步任務(wù)
asyncio.get_event_loop().run_until_complete(fill_form())
優(yōu)點
- 支持無頭瀏覽器。
- 可以處理復(fù)雜的交互和動態(tài)內(nèi)容。
缺點
- 需要異步編程。
- 僅支持Chromium瀏覽器。
6. RoboBrowser
簡介
RoboBrowser 是一個簡單的庫,結(jié)合了requests和BeautifulSoup,適合快速實現(xiàn)表單提交。
適用場景
- 簡單的表單提交任務(wù)。
- 不需要處理JavaScript動態(tài)內(nè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)
# 檢查提交結(jié)果
if browser.response.status_code == 200:
print('表單提交成功!')
else:
print('表單提交失?。?)
優(yōu)點
- 簡單易用。
- 不需要啟動瀏覽器。
缺點
- 無法處理JavaScript動態(tài)內(nèi)容。
- 功能有限。
橫向比較
| 工具 | 是否需要瀏覽器 | 是否支持JavaScript | 是否支持多瀏覽器 | 學(xué)習(xí)曲線 | 適用場景 |
|---|---|---|---|---|---|
| Selenium | 是 | 是 | 是 | 中等 | 復(fù)雜交互、跨瀏覽器測試 |
| Playwright | 是 | 是 | 是 | 中等 | 復(fù)雜交互、高效自動化 |
| Requests + BS4 | 否 | 否 | 否 | 低 | 簡單表單提交 |
| MechanicalSoup | 否 | 否 | 否 | 低 | 簡單表單提交 |
| Pyppeteer | 是 | 是 | 否(僅Chromium) | 中等 | 復(fù)雜交互、無頭瀏覽器支持 |
| RoboBrowser | 否 | 否 | 否 | 低 | 簡單表單提交 |
總結(jié)
- 如果需要處理復(fù)雜的交互和動態(tài)內(nèi)容,推薦使用
Playwright或Selenium。 - 如果只需要簡單的表單提交,可以使用
MechanicalSoup或RoboBrowser。 - 如果不想啟動瀏覽器,可以使用
requests+BeautifulSoup。
以上就是Python實現(xiàn)自動化表單填寫功能的詳細(xì)內(nèi)容,更多關(guān)于Python自動化表單填寫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python+opencc庫實現(xiàn)簡體繁體字轉(zhuǎn)換
opencc就是一個非常好的中文字轉(zhuǎn)換庫,其中包含了非常豐富的對應(yīng)字詞表,本文主要介紹了如何使用opencc庫實現(xiàn)簡體繁體字轉(zhuǎn)換,感興趣的可以了解下2024-11-11
python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(三):socket網(wǎng)絡(luò)服務(wù)器
服務(wù)器和客戶端程序很類似,上節(jié)學(xué)習(xí)了客戶端程序,這一節(jié)將仔細(xì)學(xué)習(xí)一下利用socket建立TCP服務(wù)器和UDP服務(wù)器2014-06-06
Python打包后的exe還原成.py的實現(xiàn)步驟
本文主要介紹了Python打包后的exe還原成.py的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
如何配置關(guān)聯(lián)Python 解釋器 Anaconda的教程(圖解)
這篇文章主要介紹了如何配置關(guān)聯(lián)Python 解釋器 Anaconda的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)火鍋工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
如何不用安裝python就能在.NET里調(diào)用Python庫
這篇文章主要介紹了如何不用安裝python就能在.NET里調(diào)用Python庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07
快速解決pyqt5窗體關(guān)閉后子線程不同時退出的問題
今天小編就為大家分享一篇快速解決pyqt5窗體關(guān)閉后子線程不同時退出的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06

