核心原理概述
这是一个基于浏览器自动化技术的交互式网页抓取系统,完全用PHP实现,通过Selenium WebDriver控制真实的Chrome浏览器,让用户手动完成复杂登录过程,然后程序自动检测状态并抓取目标内容。
技术架构分层
- 用户交互层(Web界面)
提供友好的Web界面,引导用户配置任务
实时显示操作状态和日志
让用户在浏览器中手动完成登录,支持各种复杂登录方式(验证码、短信、二维码等)
- 自动化控制层(PHP + Selenium)
Selenium WebDriver:浏览器自动化框架
ChromeDriver:Chrome浏览器的驱动程序
php-webdriver库:PHP的Selenium客户端
通过9515端口与ChromeDriver通信,发送自动化指令
- 浏览器执行层(Chrome浏览器)
真实的Chrome浏览器实例
执行用户操作和自动化指令
渲染完整的网页,包括JavaScript动态内容
工作流程详解
阶段一:准备阶段
用户访问Web界面 → 输入登录URL和目标URL → PHP启动ChromeDriver → 启动Chrome浏览器
阶段二:手动登录阶段
浏览器打开登录页面 → 用户手动输入凭证完成登录 → 程序监控登录状态 → 检测登录成功指标
登录状态检测机制:
URL关键词匹配(如包含"dashboard")
页面内容关键词匹配(如"欢迎")
特定元素存在性检查(如退出按钮)
定时轮询(每3秒检查一次)
阶段三:自动化抓取阶段
程序导航到目标页面 → 等待页面加载 → 提取指定内容 → 保存结果
内容提取方式:
CSS选择器提取特定元素
自动提取所有链接
提取表格数据
页面截图保存
阶段四:结果处理阶段
生成JSON数据文件 → 创建HTML可视化报告 → 提供下载链接 → 清理资源
关键技术点
- 无头模式 vs 有头模式
php
// 无头模式(后台运行,适合服务器)
chromeOptions->addArguments(['--headless'])
// 有头模式(显示界面,适合交互)
chromeOptions->addArguments(['--start-maximized'])
- 会话管理机制
会话ID保存:每次启动浏览器生成唯一ID
会话重连:PHP可以重新连接到正在运行的浏览器会话
状态持久化:保存登录状态和Cookies
- 异步监控机制
主线程保持Web响应
通过轮询方式监控浏览器状态
JavaScript实时更新界面状态
- 跨进程通信
PHP进程 ↔ ChromeDriver (9515端口) ↔ Chrome浏览器进程
PHP通过HTTP协议与ChromeDriver通信
ChromeDriver通过Chrome DevTools协议控制浏览器
所有指令都是HTTP请求/响应
适用场景
需要登录的网站:银行、电商、社交平台
JavaScript重度网站:单页应用、动态加载
有复杂验证的网站:验证码、滑块、行为验证
需要人工干预的场景:审批、确认、选择