type
Post
status
Published
date
Jun 29, 2024
slug
summary
tags
category
建筑
icon
password
作为一名前线工程师(AE),我们每天面临着极其繁重的现场协调和质量把控工作。然而,现实是:我们经常要被迫坐在电脑前,化身为无情的“打字机”。
在工程检查申请(Request for Inspection, RFI)流程中,尤其是在使用 DWSS 等数字系统的项目中,传统的提交方式往往需要将表格里的数据一行行手动复制粘贴到网页表单中。这不仅耗费了大量本该用于现场巡视的时间,而且在批量提交时极易出现人为错漏。
为了解决这个痛点,我开发了一个 Python 自动化脚本。它能直接读取 Excel 数据并自动在网页端完成表单填报。今天,我把这个方案开源出来,希望能帮到被填表折磨的工程同行们。
notion image

核心解决思路

这个自动化脚本的核心逻辑其实并不复杂,主要通过三个步骤模拟人类操作:
  1. 数据提取:使用 pandas 库,从预先整理好的 Excel 文件中批量读取 RFI 待填信息。
  1. 元素定位:通过 lxml 库解析目标网页的本地 HTML 文件,精准抓取各个表单输入框的元素 ID。
  1. 自动提交:利用 requests 库携带你的专属 Cookie,模拟浏览器行为,向服务器高频发送 POST 请求,瞬间完成数据提交。
 
🛠️ 保姆级部署指南 如果你也想把双手从键盘上解放出来,请跟着以下步骤操作。

第一步:获取源码

欢迎访问我的 GitHub 仓库下载完整代码: 🔗 Autofill-in-DWSS (点击跳转) (如果这个脚本帮到了你,希望能顺手点个 ⭐️ Star,这也是我持续更新的动力!)

第二步:准备你的“弹药” (数据文件)

代码包中有两个关键文件需要你准备: • 3_test.xlsx:这是你的数据源。把你今天要提交的所有 RFI 信息按列填入这个 Excel 表格中即可。 • id.html:这是网页的“地图”。你需要获取目标填报页面的源码。 操作方法:用 Chrome 浏览器打开你的 RFI 填报网页 $\rightarrow$ 右键点击空白处选择“查看网页源代码” (或快捷键 Ctrl+U / Cmd+U) $\rightarrow$ 保存页面 (Ctrl+S) $\rightarrow$ 命名为 id.html,放在脚本同一目录下。
(注:仓库内已附带了一个做好的 Demo,可直接参考。)

第三步:配置 Python 运行环境

如果你还没配置过 Python 环境,推荐使用 VSCode 作为你的主阵地:
  1. 安装 Python 和 VSCode,并在 VSCode 中安装 Python 扩展。
  1. 在 VSCode 终端中创建一个虚拟环境以隔离依赖:Bash
    1. python -m venv myenv
  1. 激活虚拟环境 (Windows 使用 myenv\Scripts\activate,Mac/Linux 使用 source myenv/bin/activate)。
  1. 一键安装核心依赖包:Bash
    1. pip install lxml requests pandas openpyxl

第四步:修改“通行证” (Cookies)

这是最关键的一步,你需要让服务器知道“你是你”。
  1. 在浏览器登录你的 DWSS (或对应系统) 页面。
  1. F12 打开开发者工具,切换到 Application (应用) 面板。
  1. 在左侧找到 Cookies,找到 ASP.NET_SessionIdeirs 这两个关键字段的值。
  1. 打开 demo2.py,找到 Cookie 配置项,把抓取到的值替换进去。格式如下:Python
    1. 'Cookie': 'eirs=你的eirs值; ASP.NET_SessionId=你的SessionId值'

第五步:一键运行

在 VSCode 中右键点击 demo2.py,选择 "Run Python File in Terminal"。 喝口咖啡的功夫,终端就会跑出成功的 log,原本需要按小时计算的填表工作,几秒钟就全部搞定了。

配置和运行

使用这个脚本只需几个简单步骤:
  1. 调整Excel文件路径
  1. 设置HTML文件路径
  1. 更新cookies值
  1. 运行脚本
脚本会自动遍历Excel中的每行数据,为每条记录生成并提交一个RFI。

实施注意事项

尽管这个脚本带来了诸多便利,使用时仍需注意以下几点:
  1. 严格遵循Excel数据格式要求,确保与网页表单字段匹配。
  1. 定期更新cookies,保证脚本的持续有效性。
  1. 遵守目标网站的使用条款和政策。
  1. 定期检查和更新HTML结构文件,以适应可能的网页变更。
notion image
#第一个文件3_test.xlsx文件是你提前准备要填写的内容
notion image
把需要填写的信息填入这个excel表格里。第一步完成
#第三个文件id.html文件是你要把网站中对应得id提取出来,做成一个HTML文件。目的是:通过lxml库解析本地HTML文件,获取关键的表单元素ID。
  • 打开浏览器(推荐使用 Chrome )。
  • 导航到包含 RFI表单的网页。
  • 右击页面空白处,选择"查看页面源代码"或按 Ctrl+U(Windows/Linux)或 Cmd+U(Mac)。
  • 在新打开的标签页中,你会看到网页的 HTML 源代码。
  • 按 Ctrl+S(Windows/Linux)或 Cmd+S(Mac)保存该页面。
  • 在保存对话框中:
    • 选择保存位置(建议与你的 Python 脚本在同一文件夹)
    • 将文件名改为 "id.html"
    • 确保保存类型为 "网页,仅 HTML"(或类似选项)
  • 点击"保存"。
其实我已经做一个完成得id.html文件,直接使用即可。上述是制作得原理和目的。
notion image
#第二个文件是demo2.py文件,
该文件利用了以下技术以及原理如下:
  1. Python 编程:整个脚本使用 Python 语言编写。
  1. 数据处理:
      • 使用 pandas 库读取和处理 Excel 文件数据。
      • 使用 lxml 库解析 HTML 文件,提取必要的元素 ID。
  1. Web 自动化:
      • 使用 requests 库模拟 HTTP POST 请求,自动提交表单数据。
  1. 日期和时间处理:使用 Python 的 datetime 模块(通过 pandas)处理日期和时间格式。
  1. 字符串操作:处理和格式化各种数据字段。
  1. 条件逻辑:使用 if-else 语句来处理不同的工作类别和子类别。
  1. 循环处理:使用 for 循环遍历 Excel 数据的每一行。
  1. 错误处理:虽然在给定的代码中没有明确的错误处理,但在实际使用中应该考虑添加异常处理机制。
  1. Web 协议:利用 HTTP 协议与服务器通信,包括设置请求头、cookies 等。
notion image
如何使用
配置代码运行环境,首先
  • 安装VSCode:
    • 从官方网站 (https://code.visualstudio.com/) 下载并安装VSCode。安装一个编译器,VScode或者PyCharm 编辑器等任一一款编译器
  • 安装Python扩展:
    • 打开VSCode
    • 点击左侧边栏的扩展图标(方块图标)
    • 搜索"Python"
    • 安装由Microsoft提供的Python扩展
    • 创建虚拟环境:
    • 打开VSCode的终端(Terminal > New Terminal)
    • 运行以下命令创建虚拟环境:
      • 复制
        python -m venv myenv
    • 激活虚拟环境:
      • Windows: myenv\Scripts\activate
      • macOS/Linux: source myenv/bin/activate
    • 安装所需的库:
      • 在激活的虚拟环境中,运行以下命令:
        pip install lxml requests pandas openpyxl
    • 打开Python文件:
      • 在VSCode中,打开包含您的Python脚本的文件夹
      • 打开 demo2.py 文件
    • 配置Python解释器:
      • Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS)打开命令面板
      • 输入 "Python: Select Interpreter"
      • 选择您刚才创建的虚拟环境
    • 准备必要的文件:
      • 确保 test.xlsxid.html 文件与 demo2.py 在同一目录下。
        notion image
    • 修改cookies:
      • 在代码中找到 cookies 字典,用您自己的有效cookies替换现有的值。
        notion image
        在DWSS页面点击鼠标右键,选择“检测”,进入页面控制台,选择“application”找到Cookie的ASP.NET_SessionId和eirs对应的value,如上图上示,然后,修改demo2.py文件的'Cookie': 'eirs=!ahhg2Qjgd/VCmSwAz5JTUhgTkMNW57ytrhSVXwGaupbk/6tComrHpFyr4VBBFUFoXdd68rUNlPTIJtg=; ASP.NET_SessionId=yxg4ltfy2ilt1z2pvu2ovmzg',
        notion image
    • 运行脚本:
      • 右键点击编辑器中的任意位置
      • 选择 "Run Python File in Terminal"
    • 查看输出:
      • 脚本的输出将显示在VSCode的集成终端中。
        notion image
        程序正常执行任务。
        结果如下:
        notion image
notion image

假如我这个项目帮到你,希望你帮我的项目点一下star,非常感谢。

notion image
让工具服务于人
在工程管理不断推进数字化的今天,系统越来越复杂,但我们的工作方式不应该变得更笨重。将重复性的、毫无创造力的数据搬运工作交给 Python 脚本,我们才能将有限的精力投入到项目统筹、安全管理和技术优化等真正需要人类智慧的地方。
欢迎在评论区交流你的使用体验,或者提出改进建议!
在这里,信号是多余的,发呆才是正经事——塔门香港建筑投标到底在干嘛?
Loading...