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

作者:

文章目录
  • 本文介绍一个面向“上海区批量入账”的网页自动化小工具的核心脚本 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。
  • 打开网页:双击 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()
  • 文件名:input.csv(与脚本同目录)。 列数:前 5 列有效;若不足 5 列则空位自动补齐为“演示行X-列Y”。 示例: 姓名,电话,地址,公司,备注张三,13800001234,上海浦东新区,某公司,备注A李四,13800004321,上海闵行区,某公司B,备注B
  • 无法启动浏览器/驱动报错: 确认已安装 Chrome/Edge/Firefox 任一浏览器。 若使用远程调试端口,确保端口 9222 已被 Chrome 打开。 页面未渲染到 50 行: 适当增大点击间隔(auto_fill.py:58 的 time.sleep(0.02))。 检查页面按钮 id 与行选择器是否与 index.html 保持一致。 input.csv 不存在或空:脚本会自动用“演示行X-列Y”补齐,不影响演示。
  • 读取 Excel(xlsx):可采用 openpyxl 或 pandas 读取为二维数据后复用填充逻辑。 表单字段校验与模板:在 index.html 增加列名映射与必填校验提示。 更大批量与稳态优化:分批点击与分批填充,适当增加等待以提高稳定性。 日志与异常处理:加入详细日志、截图与失败重试,便于问题定位。
  • 该工具围绕“批量入账”的刚性需求,利用 Selenium 将重复的人工录入流程自动化。在 2 个工作日的整体投入与约 5 小时的核心研发下,达成了可培训、可推广、可复用的自动化方案,有望在上海区获得“业务分奖励/表扬信”的认可,并为后续流程持续优化奠定基础。 以上就是Python使用Selenium实现自动化网页批量录入的详细内容,更多关于Python Selenium网页录入的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Python Selenium自动化实现网页操控 Python利用Selenium实现全网页截图 Python利用Selenium进行网页自动化与动态内容抓取操作 Python使用Selenium抓取动态网页的方法步骤 Python Selenium网页自动化利器使用详解 学习Python selenium自动化网页抓取器 Python中使用 Selenium 实现网页截图实例
  • 目录
    • 前言
    • 为什么写这个工具
    • 方案总览
    • 效果图
    • 核心代码解析
      • 数据准备:get_values
      • 浏览器驱动:create_driver
      • 自动化流程:run
    • 使用步骤
      • 完整代码
        • CSV 数据规范
          • 常见问题与排查
            • 扩展方向
              • 结语

                本文介绍一个面向“上海区批量入账”的网页自动化小工具的核心脚本 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。

                位置:d:I_LOVE_KUNKUN11月演示案例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)。

                • 位置:d:I_LOVE_KUNKUN11月演示案例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)。

                位置:d:I_LOVE_KUNKUN11月演示案例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()
                
                

                文件名: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 Selenium自动化实现网页操控
                • Python利用Selenium实现全网页截图
                • Python利用Selenium进行网页自动化与动态内容抓取操作
                • Python使用Selenium抓取动态网页的方法步骤
                • Python Selenium网页自动化利器使用详解
                • 学习Python selenium自动化网页抓取器
                • Python中使用 Selenium 实现网页截图实例

                站内搜索