OpenCode 流览器控制实现企业批量信息提取(Selenium 复用 Chrome 登录态) 一、前言做尽调、股权穿透、企业背景分析时经常需要批量导出目标公司全部自然人股东再逐一抓取每位股东名下所有任职企业。手动点开几十上百个股东页面效率极低本文分享一套基于 SeleniumChrome 调试端口复用登录态的自动化采集方案完整实现公司搜索→股东信息提取→股东个人页跳转→全页任职企业翻页抓取→结构化 JSON 输出同时梳理整套方案存在的缺陷与全套优化改进思路。适用场景批量股权尽调、自然人关联企业筛查、投融资背景核查 技术栈Python3 Selenium Chrome CDP 远程调试 DOM 解析二、整体功能概述核心能力复用本地已登录天眼查的 Chrome 会话无需代码账号密码登录规避登录风控自动搜索目标企业定位企业主页解析股东表格提取股东姓名、持股比例、股东个人主页链接遍历每个自然人股东页面切换「所有任职企业」标签循环翻页抓取全部任职公司数据自动去重输出结构化 JSON 文件 可读文本文件。以上部分的能力可根据需要进行调整可修改为实际关注的信息。整体执行流程plaintext手动启动带调试端口Chrome(保留登录态) → Selenium挂载现有Chrome实例 → 搜索目标公司并进入企业主页 → 切换股东信息Tab解析全部股东DOM数据 → 循环每一位股东跳转股东个人主页 → 切换「所有任职企业」Tab → 循环翻页采集每页企业名称自动去重 → 汇总所有股东对应任职企业落地文件三、前置环境依赖1. 软件依赖Chrome 浏览器已手动登录天眼查账号Python32. Python 依赖包bash 运行pip install selenium webdriver-manager3. 环境启动要求通过 Chrome 远程调试端口9222暴露会话Selenium 挂接复用 Cookie避免重复登录、验证码拦截。四、完整实现步骤详解4.1 复用已登录 ChromeCDP 远程调试方案方案原理不新建独立 Chrome 用户数据目录会引发 DevTools 端口冲突报错分两步手动启动带调试端口 Chrome脚本连接现有浏览器实例直接复用登录 Cookie。1手动启动 Chrome 命令bash 运行chrome.exe --remote-debugging-port9222 --user-data-dirC:\Users\xxx\User Data--remote-debugging-port9222开放调试端口--user-data-dir读取本机 Chrome 默认用户数据保存登录信息2Selenium 连接现有浏览器代码片段python 运行from selenium.webdriver import Chrome, Options options Options() # 绑定本地调试端口 options.add_experimental_option(debuggerAddress, 127.0.0.1:9222) driver Chrome(optionsoptions)4.2 搜索企业并进入公司主页直接拼接搜索 URL规避输入框点击、输入不稳定问题自动抓取第一条匹配企业链接python 运行import urllib.parse company_name 目标企业名称 # 企业名称URL编码避免中文、特殊符号失效 search_url fhttps://www.tianyancha.com/search?key{urllib.parse.quote(company_name)} driver.get(search_url) # 抓取页面第一个 /company/ 链接进入企业主页规则天眼查搜索结果首位一般为目标主体多匹配时默认取第一条。4.3 DOM 解析股东信息稳定表格遍历方案放弃 XPath / 固定 CSS 选择器采用全局 DOM 扫描向上回溯定位表格适配页面改版全局检索包含文本「股东信息」的 DOM 节点向上递归父节点找到最近table股东表格遍历表格tr行跳过表头每行提取第 2 列a文本股东姓名第 3 列文本持股比例a标签 href股东个人页链接/human/{id}。核心优势页面局部样式改动时不会直接导致解析失效。4.4 抓取股东全部任职企业含自动翻页跳转股东个人/human/{id}页面点击「所有任职企业」Tab 切换数据视图特征匹配任职企业主表格表头同时包含「职位」「企业名称」单页数据≥10 条DOM 末尾最后一张匹配表格为目标数据表逐行提取第二列企业链接内文本JS 分页逻辑循环翻页从表格向上遍历 DOM 找到分页容器.table-footer匹配当前页码 1 的分页按钮并点击重复抓取直到无下一页采集过程使用列表判断去重避免跨页重复企业。4.5 数据输出采集完成后生成两类文件test_result.json结构化机器可读数据包含公司、股东、持股、任职企业数组readable_result.txt纯文本格式化内容方便快速查看。4.6 脚本启动命令bash 运行# 提前手动启动9222端口Chrome后执行 python tianyancha_bot.py五、现有方案已知缺陷 对应临时解决办法表格问题现象产生原因当前应对方案单元格文本附带多余数字、标签前缀页面 DOM 结构自带序号前缀优先提取a标签文本不取整段单元格文本翻页后数据完全不变重复抓取同一页页面存在多套分页控件误点无关分页通过 DOM 父子关系精准绑定当前数据表对应的分页栏部分股东无个人主页链接无法抓取任职企业股东、无实名自然人仅展示名称跳过该股东日志标记无链接页面存在多张带「职位」表头表格法人、高管、股东多模块视图共用相似表格结构筛选行数≥10、DOM 靠后的表格作为主任职表六、整套方案待优化改进点6.1 浏览器连接层优化端口硬编码问题当前固定 9222 端口多脚本运行、端口占用直接崩溃优化自动探测空闲端口支持配置文件自定义端口增加端口占用重试逻辑。依赖人工启动 Chrome无法后台定时、自动化部署优化双模式切换 —— 本地复用登录态人工启动/ 无头独立 Chrome 自动登录服务器批量采集封装一键启动 Chrome 脚本。缺少元素等待机制无显式等待异步渲染 DOM 空白、元素找不到高频报错优化全局封装WebDriverWait显式等待区分 DOM 加载、接口异步数据、Loading 遮罩三种等待场景。用户数据路径硬编码换电脑、多用户直接失效优化自动读取系统默认 Chrome 用户目录支持配置自定义路径增加路径不存在异常捕获。6.2 企业搜索逻辑优化仅取第一条结果容错差重名公司、分支机构、注销主体无法区分优化支持统一社会信用代码精准搜索多条结果输出候选列表可按成立时间筛选目标企业增加无结果捕获逻辑。URL 未编码企业名称含括号、特殊符号搜索失效增加urllib.parse.quote编码处理。6.3 股东信息解析模块优化全局document.querySelectorAll(*)遍历所有 DOM页面元素量大时性能极差缩小检索范围至页面主体容器替换全局扫描为精准 CSS 选择器。未兼容股东表格懒加载首屏外股东无法抓取增加页面滚动逻辑循环滑动到底部触发全部股东渲染。采集字段不全、异常容错弱仅抓取姓名、持股、链接优化补充股东类型、认缴实缴、持股状态单条股东解析失败单独捕获不中断整体任务无链接股东分类标记存储不丢弃。6.4 任职企业抓取核心流程优化Tab 点击无加载等待切换标签后接口异步返回直接抓取会拿到旧空白数据点击后等待表格行数 0、Loading 消失再解析。表格识别逻辑存在边界 Bug任职企业不足 10 条时匹配失效采用「表头关键词 父容器 Class 分页绑定」三重特征定位表格不再依赖行数判断。JS 手写翻页逻辑维护成本高、改版易失效提供两种方案Selenium 原生分页点击 / 直接抓 XHR 接口传 page 分页速度提升数倍增加下一页置灰判断终止循环校验翻页后数据是否更新防止重复抓取。仅简单文本去重企业名称变体无法合并新增企业名称标准化清洗去除分公司、地域后缀、特殊符号支持企业 ID 精准去重区分存续 / 注销企业分开存储。6.5 反爬、稳定性与容错优化无任何风控规避策略高频抓取触发滑块验证码、IP 封禁、登录失效优化页面跳转、翻页、切换股东增加随机延时自动识别验证码、登录过期弹窗并告警大批量采集支持代理 IP 轮换。无完整日志、无断点续爬单条数据崩溃直接全量重跑搭建分级日志时间、企业、股东、错误信息落地数据持久化下次启动自动跳过已采集主体。缺少资源回收脚本异常退出残留大量 Chrome 进程占用内存finally块统一执行driver.quit()关闭浏览器。6.6 工程化 输出能力升级仅支持单次单企业采集无批量功能支持读取 Excel/CSV 批量企业清单循环采集新增 Excel 输出分 Sheet股东总表、任职企业明细表JSON 增加抓取时间、来源企业元数据。全部参数硬编码修改繁琐抽离 YAML/JSON 配置文件统一管理端口、等待时长、输出路径、代理开关等参数。6.7 性能大幅提升方案接口直抓替代 DOM 渲染采集当前方案完整加载页面广告、图片、无关组件资源损耗大抓前端 XHR 请求直接获取接口 JSON跳过页面渲染效率提升数倍。并发采集多股东任职抓取可控多线程并行降低串行等待耗时。拦截无用资源Chrome 启动屏蔽图片、视频、广告加载缩短页面加载时间。6.8 代码架构可维护性优化现有代码全流程耦合在单脚本复用、修改成本高分层模块化拆分浏览器封装模块、搜索模块、股东解析模块、任职抓取模块、数据清洗输出模块通用工具函数封装等待元素、分页、日志、文件读写、企业名称清洗页面 Class、关键词、URL 全部定义常量网站改版仅修改常量无需全量改代码。6.9 边界场景补充兼容自然人无任何任职企业空数组标记避免程序报错企业法人股东单独分支跳转企业详情页抓取对外投资不进入自然人/human页面区分当前股东 / 历史退出股东分开存储自动关闭会员弹窗、广告遮罩避免按钮被遮挡无法点击。七、总结本文提供的基于 Chrome CDP 调试端口复用登录态的天眼查采集方案解决了登录难、重复登录触发风控的痛点完整覆盖「企业 - 股东 - 股东任职企业」全链路数据采集需求。 但原生实现存在性能、容错、批量、反爬、可维护性多方面短板文中配套完整优化方案可按需改造少量企业人工尽调原生方案可直接使用大批量、自动化定时采集建议采用接口直抓、批量导入、断点续爬、代理 IP、模块化重构优化后的版本。补充说明本方案仅用于企业合法尽调、自有业务数据整理禁止用于批量爬虫商用、恶意数据爬取天眼查存在访问频率限制批量采集务必增加随机延时避免账号封禁网站前端 DOM、接口不定期改版若解析失效可根据文中「常量抽离」思路快速适配页面变更。