python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Selenium网页录入

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

作者:小庄-Python办公

本文介绍一个面向上海区批量入账的网页自动化小工具的核心脚本,在本地页面上自动点击新增一行就会批量填充五列数据,下面小编就来讲讲具体的实现方法吧

前言

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

为什么写这个工具

方案总览

效果图

核心代码解析

数据准备:get_values

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

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

关键逻辑:

浏览器驱动:create_driver

自动化流程:run

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

步骤:

使用步骤

打开网页:双击 index.html

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

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

完整代码

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

常见问题与排查

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

页面未渲染到 50 行:

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

扩展方向

结语

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

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

您可能感兴趣的文章:
阅读全文