Python使用Selenium實(shí)現(xiàn)自動(dòng)化網(wǎng)頁批量錄入
前言
本文介紹一個(gè)面向“上海區(qū)批量入賬”的網(wǎng)頁自動(dòng)化小工具的核心腳本 auto_fill.py,如何在本地頁面上自動(dòng)點(diǎn)擊“新增一行”,并批量填充五列數(shù)據(jù)(默認(rèn) 50 行),支持從 CSV 讀取或使用內(nèi)置示例數(shù)據(jù)補(bǔ)齊。
為什么寫這個(gè)工具
- 背景:上海區(qū)批量入賬場(chǎng)景,網(wǎng)頁僅支持人工逐條錄入,流程耗時(shí)、重復(fù)勞動(dòng)多、易出錯(cuò)。
- 目標(biāo):通過網(wǎng)頁自動(dòng)化錄入,顯著縮短入賬耗時(shí)、提升準(zhǔn)確率與一致性。
- 人力與周期:整體人力耗時(shí) 2 個(gè)工作日,其中工具核心功能研發(fā)與聯(lián)調(diào)約 5 小時(shí)。
- 預(yù)期推廣:通過 1 小時(shí)的集中培訓(xùn)完成安裝與演示,讓財(cái)務(wù)人員可獨(dú)立使用;預(yù)計(jì)獲得“業(yè)務(wù)分獎(jiǎng)勵(lì)/表揚(yáng)信”等認(rèn)可形式。
方案總覽
- 頁面?zhèn)龋?code>index.html 提供動(dòng)態(tài)表單,每行包含 5 個(gè)輸入框,可點(diǎn)擊
+ 新增一行增加行數(shù),并支持導(dǎo)出多列CSV。 - 自動(dòng)化側(cè):
auto_fill.py使用 Selenium 自動(dòng)打開頁面、點(diǎn)擊新增行到目標(biāo)數(shù)量、并逐行填入 5 列數(shù)據(jù)。 - 數(shù)據(jù)來源:優(yōu)先讀取同目錄
input.csv的前 50 行×5 列,若不足則按“演示行X-列Y”自動(dòng)補(bǔ)齊。 - 瀏覽器策略:優(yōu)先連接已開啟的 Chrome 遠(yuǎn)程調(diào)試端口
127.0.0.1:9222,回退到本地 Chrome→Edge→Firefox。
效果圖

核心代碼解析
數(shù)據(jù)準(zhǔn)備:get_values
位置:d:\I_LOVE_KUNKUN\11月\演示案例\auto_fill.py:14
作用:讀取 CSV 的前 rows_count 行(每行最多 5 列),不足的列與行用“演示行X-列Y”補(bǔ)齊,確保最終是 rows_count×5 的二維數(shù)據(jù)。
關(guān)鍵邏輯:
- 讀取
csv_path(auto_fill.py:12)的內(nèi)容并截取到指定行數(shù)(auto_fill.py:17到auto_fill.py:24)。 - 若行數(shù)不足則補(bǔ)齊(
auto_fill.py:27到auto_fill.py:33)。
瀏覽器驅(qū)動(dòng):create_driver
- 位置:
d:\I_LOVE_KUNKUN\11月\演示案例\auto_fill.py:36 - 作用:優(yōu)先使用已啟動(dòng)的 Chrome 遠(yuǎn)程調(diào)試端口連接;失敗時(shí)回退到 Chrome/Edge/Firefox。
- 關(guān)鍵邏輯:設(shè)置
Options().add_experimental_option('debuggerAddress', '127.0.0.1:9222')(auto_fill.py:38到auto_fill.py:40)。
自動(dòng)化流程:run
位置:d:\I_LOVE_KUNKUN\11月\演示案例\auto_fill.py:50
步驟:
- 打開本地頁面
index.html(auto_fill.py:52)。 - 等待并獲取“新增一行”按鈕(
auto_fill.py:54)。 - 連續(xù)點(diǎn)擊到目標(biāo)行數(shù)(默認(rèn)
count=50,auto_fill.py:55到auto_fill.py:58)。 - 等待行渲染完成并拿到所有行節(jié)點(diǎn)(
auto_fill.py:59到auto_fill.py:61)。 - 逐行填入五列數(shù)據(jù)(
auto_fill.py:62到auto_fill.py:66)。
使用步驟
打開網(wǎng)頁:雙擊 index.html。
運(yùn)行自動(dòng)錄入:在當(dāng)前目錄執(zhí)行:python auto_fill.py
可選(遠(yuǎn)程調(diào)試更穩(wěn)定):先啟動(dòng) Chrome 并開啟端口,再運(yùn)行腳本:
- Windows:
"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" --remote-debugging-port=9222 - 然后執(zhí)行:
python auto_fill.py
完整代碼
from pathlib import Path
import os
import csv
import time
import subprocess
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
base = Path(__file__).resolve().parent
html_path = base / 'index.html'
csv_path = base / 'input.csv'
def find_chrome():
candidates = [
r"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
r"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
str(Path(os.getenv('LOCALAPPDATA', '')) / 'Google/Chrome/Application/chrome.exe'),
]
for p in candidates:
if p and Path(p).is_file():
return p
return None
def start_chrome_debug(port=9222, user_data_dir=None):
exe = find_chrome()
if not exe:
return False
if not user_data_dir:
user_data_dir = str(base / 'chrome_profile')
os.makedirs(user_data_dir, exist_ok=True)
cmd = [exe, f'--remote-debugging-port={port}', f'--user-data-dir={user_data_dir}']
try:
subprocess.Popen(cmd)
time.sleep(1.5)
return True
except Exception:
return False
def get_values(rows_count, cols=5):
vals = []
try:
with open(csv_path, 'r', encoding='utf-8-sig') as f:
for row in csv.reader(f):
r = []
for j in range(cols):
r.append(row[j] if j < len(row) else '')
vals.append(r)
if len(vals) >= rows_count:
break
except Exception:
vals = []
if len(vals) < rows_count:
for i in range(len(vals) + 1, rows_count + 1):
vals.append([f'演示行{i}-列{j}' for j in range(1, cols + 1)])
for i in range(rows_count):
for j in range(cols):
if vals[i][j] == '':
vals[i][j] = f'演示行{i + 1}-列{j + 1}'
return vals
def create_driver():
try:
opts = Options()
opts.add_experimental_option('debuggerAddress', '127.0.0.1:9222')
return webdriver.Chrome(options=opts)
except Exception:
try:
return webdriver.Chrome()
except Exception:
try:
return webdriver.Edge()
except Exception:
return webdriver.Firefox()
def run():
start_chrome_debug(9222, str(base / 'chrome_profile'))
driver = create_driver()
driver.get(html_path.as_uri())
wait = WebDriverWait(driver, 10)
add_btn = wait.until(EC.element_to_be_clickable((By.ID, 'addRowBtn')))
count = 50
for _ in range(count - 1):
add_btn.click()
time.sleep(0.02)
wait.until(lambda d: len(d.find_elements(By.CSS_SELECTOR, '#rows .row')) >= count)
rows = driver.find_elements(By.CSS_SELECTOR, '#rows .row')
values = get_values(count, 5)
for i in range(count):
inputs = rows[i].find_elements(By.CSS_SELECTOR, '.value-input')
for j in range(5):
inputs[j].clear()
inputs[j].send_keys(values[i][j])
time.sleep(2)
driver.quit()
if __name__ == '__main__':
run()
CSV 數(shù)據(jù)規(guī)范
文件名:input.csv(與腳本同目錄)。
列數(shù):前 5 列有效;若不足 5 列則空位自動(dòng)補(bǔ)齊為“演示行X-列Y”。
示例:
姓名,電話,地址,公司,備注
張三,13800001234,上海浦東新區(qū),某公司,備注A
李四,13800004321,上海閔行區(qū),某公司B,備注B
常見問題與排查
無法啟動(dòng)瀏覽器/驅(qū)動(dòng)報(bào)錯(cuò):
- 確認(rèn)已安裝 Chrome/Edge/Firefox 任一瀏覽器。
- 若使用遠(yuǎn)程調(diào)試端口,確保端口 9222 已被 Chrome 打開。
頁面未渲染到 50 行:
- 適當(dāng)增大點(diǎn)擊間隔(
auto_fill.py:58的time.sleep(0.02))。 - 檢查頁面按鈕
id與行選擇器是否與index.html保持一致。
input.csv 不存在或空:腳本會(huì)自動(dòng)用“演示行X-列Y”補(bǔ)齊,不影響演示。
擴(kuò)展方向
- 讀取 Excel(
xlsx):可采用openpyxl或pandas讀取為二維數(shù)據(jù)后復(fù)用填充邏輯。 - 表單字段校驗(yàn)與模板:在
index.html增加列名映射與必填校驗(yàn)提示。 - 更大批量與穩(wěn)態(tài)優(yōu)化:分批點(diǎn)擊與分批填充,適當(dāng)增加等待以提高穩(wěn)定性。
- 日志與異常處理:加入詳細(xì)日志、截圖與失敗重試,便于問題定位。
結(jié)語
該工具圍繞“批量入賬”的剛性需求,利用 Selenium 將重復(fù)的人工錄入流程自動(dòng)化。在 2 個(gè)工作日的整體投入與約 5 小時(shí)的核心研發(fā)下,達(dá)成了可培訓(xùn)、可推廣、可復(fù)用的自動(dòng)化方案,有望在上海區(qū)獲得“業(yè)務(wù)分獎(jiǎng)勵(lì)/表揚(yáng)信”的認(rèn)可,并為后續(xù)流程持續(xù)優(yōu)化奠定基礎(chǔ)。
以上就是Python使用Selenium實(shí)現(xiàn)自動(dòng)化網(wǎng)頁批量錄入的詳細(xì)內(nèi)容,更多關(guān)于Python Selenium網(wǎng)頁錄入的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python+Selenium瀏覽器自動(dòng)化測(cè)試與網(wǎng)頁自動(dòng)登錄
- Python自動(dòng)化測(cè)試框架:unittest、pytest、Selenium、requests和Pytest-BDD
- Python使用Selenium實(shí)現(xiàn)Web自動(dòng)化的完整指南
- 從零開始學(xué)習(xí)Python Selenium瀏覽器元素定位與實(shí)戰(zhàn)技巧
- Python使用Selenium將網(wǎng)頁保存為圖片或PDF
- 從入門到精通解析Python Selenium如何模擬瀏覽器操作
- Python Selenium 滾動(dòng)到特定元素的幾種實(shí)現(xiàn)方法
- python中selenium安裝配置與使用示例
- Python使用Selenium檢查元素是否存在的方法
- python利用Selenium搭建免費(fèi)Web搜索API服務(wù)的方法
相關(guān)文章
Python利用機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)垃圾郵件的識(shí)別
今天教大家利用簡(jiǎn)單的機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)垃圾郵件識(shí)別,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
Python基于文件內(nèi)容實(shí)現(xiàn)查找文件功能
無論是Linux系統(tǒng)還是Windows系統(tǒng)都有基于文件名實(shí)現(xiàn)過濾、查找的功能。但是如果想要查找一些關(guān)于某些文件指定內(nèi)容的文件,好像它們明面上沒有這樣的功能了。這個(gè)時(shí)候就可以通過 Python 來實(shí)現(xiàn)這樣的功能,快跟隨小編一起學(xué)習(xí)一下吧2022-05-05
Python之Await 協(xié)議的實(shí)現(xiàn)
本文主要介紹了Python之Await 協(xié)議的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-05-05
python獲取文件版本信息、公司名和產(chǎn)品名的方法
這篇文章主要介紹了python獲取文件版本信息、公司名和產(chǎn)品名的方法,是Python程序設(shè)計(jì)中非常實(shí)用的技巧,需要的朋友可以參考下2014-10-10
python安裝/卸載模塊方法步驟詳解(附詳細(xì)圖解)
在日常工作中會(huì)需要安裝或者卸載Python模塊.于是我整理了一下,下面這篇文章主要給大家介紹了關(guān)于python安裝/卸載模塊的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
Python通過keyboard庫實(shí)現(xiàn)模擬和監(jiān)聽鍵盤
這篇文章主要為大家詳細(xì)介紹了Python如何通過keyboard庫實(shí)現(xiàn)模擬和監(jiān)聽鍵盤,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-10-10
使用Python實(shí)現(xiàn)調(diào)整Excel中的行列順序
調(diào)整Excel?行列順序指的是改變工作表中行或列的位置,以便更好地展示和分析數(shù)據(jù),本文將介紹如何通過Python高效地調(diào)整Excel?行列順序,感興趣的可以了解下2025-01-01
Python數(shù)據(jù)可視化之Matplotlib和Seaborn的使用教程詳解
這篇文章主要為大家詳細(xì)介紹了Python數(shù)據(jù)可視化中Matplotlib和Seaborn使用的相關(guān)教程,文中的示例代碼講解詳細(xì),有需要的可以參考下2024-03-03

