# sqlPaste **Repository Path**: xihaishen/sql-paste ## Basic Information - **Project Name**: sqlPaste - **Description**: 访问 [全国新书目] 网站自动化,协助用户处理大量的 sql 更新语句。能够大幅度减少用户的复制粘贴等重复操作。 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: https://xihaixin.cn - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-05 - **Last Updated**: 2026-09-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python, keyMouseGo, pyperclip ## README # SQL_PSAT 这是一个用于生成更新数据库中最新图书数据SQL Server 语句的项目。用户需要根据图书的 isbn 编号访问网站[快速查书](https://cnpub.com.cn/)来对比数据库中的图书信息,并进行更新。 由于存在大量需要更新的数据,因此编写了该项目,用于自动化大部分复制粘贴和切屏操作。除了使用类似`键鼠精灵`进行自动化,该项目还逆向找到了[快速查书](https://cnpub.com.cn/)用于查书的接口,因此可以向其发送 POST 请求,从而实现更高效地获取数据。 ## 一、网站访问自动化 借助开源项目 [KeymouseGo](https://github.com/taojy123/KeymouseGo) 来录制用户的鼠标操作,实现对网站[快速查书](https://cnpub.com.cn/)的搜索半自动化。并嵌入 pyperclip 自动获取剪贴板中的内容并记录到相关的文件中。我们构建了 autoPasteProcess 模块,实现 “一次执行,全流程实现”。 autoPasteProcess 模块的构成: - Timer:计时器,用于记录某些操作的耗时 - RowData:数据类对象,托管需要全局访问的数据实例 - AutoTools: 提供剪贴板,用户输入,按键精灵、键鼠脚本控制等功能 - ProcessingContext:传递处理过程中需要用到的上下文 - AutoDeal:数据自动化处理过程发生的地方,初始化计数器、自动工具类、准备上下文,策略配置 - AutoPasteProcess: 主方法 run_processer调度整个处理流程,启动 `AutoDeal.run_deal` 对 isbn 进行分组,以及策略的执行 ## 二、环境变量配置 .env 配置文件相关的设置 `示例说明`: ```bash # 加密和解密的密钥 - 为保护网站,在此不便透露 AES_KEY=...... AES_IV=...... # 网站快速查书的接口 BASE_URL=https://cnpub.com.cn/prod-api/api/index/searchQuick REQUEST_DELAY=3 OUT_DATA=scrape_data # 需要挂载的数据目录 # selenium 浏览器驱动 CHROME_DRIVER_PATH=D:\\Program_OR\\Program_sps\\webdriver\\chromedriver-win64\\chromedriver.exe # 用户录制的键鼠脚本 SCRIPT0=全国新书目-chrome02.json5 SCRIPT1=国家图书馆-edge01.json5 SCRIPT2=全国新书目-edge02.json5 KEYMOUSEGO_EXE_PATH=D:\\Program_OR\\Program_sps\\sql_paste\\autoKeyMouse\\program\\KeymouseGo_v5_2_1-win.exe # 是否启用自动化 - 通过 API 接口 AUTO_SINGLE_DEAL=False ``` ## 三、启动并运行程序 该项目分为两部分,第一部分是用于对 fencetitle 或 author 进行更新操作,由 auto_process 模块进行实现。 如果想要通过 API 接口获取数据(仅适用于 SingleBatch 模式)实现全自动化,需要在 .env 文件中将 `AUTO_SINGLE_DEAL` 配置为 `True`, 并启动本地 Chrome 应用. 为了避免网站监测到一些自动化特征,我们使用原生的谷歌浏览器。这个是它对应的应用位置:"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",我们的程序通过监听 9222 端口来连接该浏览器。 ```bash ## 启动浏览器并设置用户数据目录 & "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" --remote-debugging-port=9222 --user-data-dir="C:\\sel_temp" ``` **self.driver = webdriver.Chrome(service=service, options=chrome_options)** 再 init_brower 时,先对 driver 驱动器进行初始化,然后跳转到登陆页面。这个地方主要的问题在于 本地Chrome 需要较长时间在内部加载各种数据,需要花费较长时间。因此,需要等待一段时间,其标志是谷歌浏览器上自动出现登陆页面:https://cnpub.com.cn 。或许我们可以在获取登录页面之前先对浏览器进行刷新。 “self.driver.get("https://cnpub.com.cn/login.html#/login")” 这里似乎等待一段时间...... ```bash python autoKeyMouse/auto_process.py ``` 第二部分是对读者级别进行纠错,尤其是对于 reader_grade = '大学及以上' 的数据,这部分主要是通过监听剪贴板的变化,进而实现对错误图书数据 isbn 的记录 ```bash python sql_paste.py ``` 第三部分是一些有用的工具: ```python python stringfield/run_commands.py ``` 隐藏的彩蛋: 请按 Enter 启动浏览器自动化 | F 修改数据 ::>> 这里你可以输入数字: 1,2,3 或 n 这个可以用来切换键鼠自动化的脚本 ## 四、遇到的一些坑 1. 由于网站本身禁止复制,而我在某些情况下需要复制相关数据 - 因此下载了一个浏览器插件 “网页万能复制” 但是这个插件会被网站检测到,因此一旦触发验证码弹窗,即便点击的相关图片或文字正确,网易的那个防护依然不让通过,还有滑块验证也是如此。 2. 谷歌浏览器自动更新导致 webdriver 和 浏览器版本号不一致,这也会时程序运行出错 3. 在请求头中还有一个 noneStr 这是一个时间戳,需要先对其单独进行加密,然后再对请求头进行加密 4. 该网站值得**夸赞**的一点是:加密和解密的密钥写死在前端,同时请求头和日期的加密,以及响应体的解密使用的是同一套加密手段 ## 五、开发路线图 - [x] 直连数据库,使用程序自动化执行 SQL 脚本 - [x] 将 SQL 脚本进行拆分,设计更加健壮的数据处理流程 - [ ] 将本地数据文件的冗余存储以及过时的更新逻辑从程序代码中移除,采用数据库存储相关数据 ## 六、免责声明 本项目仅供个人学习和研究,切勿对网站进行大规模数据抓取操作(虽然也不大可能,因为网站防护太强了,动不动就弹出验证码,一不小心就触发风控)。由此产生的一切后果与本项目作者无关。