Python使用Selenium实现自动化网页批量录入

 更新时间:2025年11月25日 09:08:05   作者:小庄-Python办公  
本文介绍一个面向上海区批量入账的网页自动化小工具的核心脚本,在本地页面上自动点击新增一行就会批量填充五列数据,下面小编就来讲讲具体的实现方法吧

前言

本文介绍一个面向“上海区批量入账”的网页自动化小工具的核心脚本 auto_fill.py,如何在本地页面上自动点击“新增一行”,并批量填充五列数据(默认 50 行),支持从 CSV 读取或使用内置示例数据补齐。

为什么写这个工具

  • 背景:上海区批量入账场景,网页仅支持人工逐条录入,流程耗时、重复劳动多、易出错。
  • 目标:通过网页自动化录入,显著缩短入账耗时、提升准确率与一致性。
  • 人力与周期:整体人力耗时 2 个工作日,其中工具核心功能研发与联调约 5 小时。
  • 预期推广:通过 1 小时的集中培训完成安装与演示,让财务人员可独立使用;预计获得“业务分奖励/表扬信”等认可形式。

方案总览

  • 页面侧:index.html 提供动态表单,每行包含 5 个输入框,可点击 + 新增一行 增加行数,并支持导出多列 CSV
  • 自动化侧:auto_fill.py 使用 Selenium 自动打开页面、点击新增行到目标数量、并逐行填入 5 列数据。
  • 数据来源:优先读取同目录 input.csv 的前 50 行×5 列,若不足则按“演示行X-列Y”自动补齐。
  • 浏览器策略:优先连接已开启的 Chrome 远程调试端口 127.0.0.1:9222,回退到本地 Chrome→Edge→Firefox。

效果图

核心代码解析

数据准备:get_values

位置:d:\I_LOVE_KUNKUN\11月\演示案例\auto_fill.py:14

作用:读取 CSV 的前 rows_count 行(每行最多 5 列),不足的列与行用“演示行X-列Y”补齐,确保最终是 rows_count×5 的二维数据。

关键逻辑:

  • 读取 csv_pathauto_fill.py:12)的内容并截取到指定行数(auto_fill.py:17auto_fill.py:24)。
  • 若行数不足则补齐(auto_fill.py:27auto_fill.py:33)。

浏览器驱动:create_driver

  • 位置:d:\I_LOVE_KUNKUN\11月\演示案例\auto_fill.py:36
  • 作用:优先使用已启动的 Chrome 远程调试端口连接;失败时回退到 Chrome/Edge/Firefox。
  • 关键逻辑:设置 Options().add_experimental_option('debuggerAddress', '127.0.0.1:9222')auto_fill.py:38auto_fill.py:40)。

自动化流程:run

位置:d:\I_LOVE_KUNKUN\11月\演示案例\auto_fill.py:50

步骤:

  • 打开本地页面 index.htmlauto_fill.py:52)。
  • 等待并获取“新增一行”按钮(auto_fill.py:54)。
  • 连续点击到目标行数(默认 count=50auto_fill.py:55auto_fill.py:58)。
  • 等待行渲染完成并拿到所有行节点(auto_fill.py:59auto_fill.py:61)。
  • 逐行填入五列数据(auto_fill.py:62auto_fill.py:66)。

使用步骤

打开网页:双击 index.html

运行自动录入:在当前目录执行:python auto_fill.py

可选(远程调试更稳定):先启动 Chrome 并开启端口,再运行脚本:

  • Windows:"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" --remote-debugging-port=9222
  • 然后执行: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 数据规范

文件名:input.csv(与脚本同目录)。

列数:前 5 列有效;若不足 5 列则空位自动补齐为“演示行X-列Y”。

示例:

姓名,电话,地址,公司,备注
张三,13800001234,上海浦东新区,某公司,备注A
李四,13800004321,上海闵行区,某公司B,备注B

常见问题与排查

无法启动浏览器/驱动报错:

  • 确认已安装 Chrome/Edge/Firefox 任一浏览器。
  • 若使用远程调试端口,确保端口 9222 已被 Chrome 打开。

页面未渲染到 50 行:

  • 适当增大点击间隔(auto_fill.py:58time.sleep(0.02))。
  • 检查页面按钮 id 与行选择器是否与 index.html 保持一致。

input.csv 不存在或空:脚本会自动用“演示行X-列Y”补齐,不影响演示。

扩展方向

  • 读取 Excel(xlsx):可采用 openpyxlpandas 读取为二维数据后复用填充逻辑。
  • 表单字段校验与模板:在 index.html 增加列名映射与必填校验提示。
  • 更大批量与稳态优化:分批点击与分批填充,适当增加等待以提高稳定性。
  • 日志与异常处理:加入详细日志、截图与失败重试,便于问题定位。

结语

该工具围绕“批量入账”的刚性需求,利用 Selenium 将重复的人工录入流程自动化。在 2 个工作日的整体投入与约 5 小时的核心研发下,达成了可培训、可推广、可复用的自动化方案,有望在上海区获得“业务分奖励/表扬信”的认可,并为后续流程持续优化奠定基础。

以上就是Python使用Selenium实现自动化网页批量录入的详细内容,更多关于Python Selenium网页录入的资料请关注脚本之家其它相关文章!

相关文章

  • Python利用机器学习算法实现垃圾邮件的识别

    Python利用机器学习算法实现垃圾邮件的识别

    今天教大家利用简单的机器学习算法实现垃圾邮件识别,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • python中extend功能用法举例

    python中extend功能用法举例

    这篇文章主要给大家介绍了关于python中extend功能的相关资料,Python中的extend()方法是一种非常有用的列表操作,它可以将一个列表中的元素添加到另一个列表的末尾,需要的朋友可以参考下
    2023-08-08
  • Python基于文件内容实现查找文件功能

    Python基于文件内容实现查找文件功能

    无论是Linux系统还是Windows系统都有基于文件名实现过滤、查找的功能。但是如果想要查找一些关于某些文件指定内容的文件,好像它们明面上没有这样的功能了。这个时候就可以通过 Python 来实现这样的功能,快跟随小编一起学习一下吧
    2022-05-05
  • Python之Await 协议的实现

    Python之Await 协议的实现

    本文主要介绍了Python之Await 协议的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-05-05
  • PyCharm配置第三方镜像源的解决方法

    PyCharm配置第三方镜像源的解决方法

    在pycharm中配置第三方镜像后,秩序搜索需要的第三方库,就可以使用第三方镜像下载,速度不是一般的快,这篇文章主要介绍了PyCharm配置第三方镜像源,需要的朋友可以参考下
    2024-01-01
  • python获取文件版本信息、公司名和产品名的方法

    python获取文件版本信息、公司名和产品名的方法

    这篇文章主要介绍了python获取文件版本信息、公司名和产品名的方法,是Python程序设计中非常实用的技巧,需要的朋友可以参考下
    2014-10-10
  • python安装/卸载模块方法步骤详解(附详细图解)

    python安装/卸载模块方法步骤详解(附详细图解)

    在日常工作中会需要安装或者卸载Python模块.于是我整理了一下,下面这篇文章主要给大家介绍了关于python安装/卸载模块的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Python通过keyboard库实现模拟和监听键盘

    Python通过keyboard库实现模拟和监听键盘

    这篇文章主要为大家详细介绍了Python如何通过keyboard库实现模拟和监听键盘,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2024-10-10
  • 使用Python实现调整Excel中的行列顺序

    使用Python实现调整Excel中的行列顺序

    调整Excel 行列顺序指的是改变工作表中行或列的位置,以便更好地展示和分析数据,本文将介绍如何通过Python高效地调整Excel 行列顺序,感兴趣的可以了解下
    2025-01-01
  • Python数据可视化之Matplotlib和Seaborn的使用教程详解

    Python数据可视化之Matplotlib和Seaborn的使用教程详解

    这篇文章主要为大家详细介绍了Python数据可视化中Matplotlib和Seaborn使用的相关教程,文中的示例代码讲解详细,有需要的可以参考下
    2024-03-03

最新评论