1. 为什么现代爬虫必须处理JavaScript渲染
十年前我们抓取网页时,只需要简单的HTTP请求就能获取完整HTML内容。但如今打开Chrome开发者工具对比"查看网页源代码"和"检查元素"的内容,会发现越来越多的关键数据只在执行JavaScript后才出现。这种现象在电商价格、社交动态、金融数据等场景尤为明显。
去年我帮某品牌监控竞品价格时,发现传统requests库获取的HTML里商品价格全是空标签。打开浏览器却能看到完整价格信息——这正是典型的客户端渲染(CSR)场景。现代前端框架(React/Vue/Angular)默认采用CSR模式,数据通过AJAX异步加载,最终由浏览器执行JS完成渲染。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Selenium的核心工作原理
2.1 浏览器自动化引擎
Selenium WebDriver通过各浏览器官方提供的驱动程序(如ChromeDriver),直接操控真实浏览器内核。以Chrome为例,其工作流程:
- 启动ChromeDriver进程(默认端口9515)
- 通过HTTP协议发送WebDriver指令
- ChromeDriver调用Chromium内核执行操作
- 返回执行结果JSON数据
python复制from selenium import webdriver
driver = webdriver.Chrome() # 启动Chrome实例
driver.get("https://example.com") # 发送导航指令
print(driver.page_source) # 获取渲染后DOM
2.2 与无头浏览器的深度交互
无头模式(Headless)虽然节省资源,但需要注意:
- Chrome 59+和Firefox 56+原生支持Headless
- 某些反爬策略会检测
navigator.webdriver属性 - 内存占用仍比requests高10-20倍
推荐配置参数:
python复制options = webdriver.ChromeOptions()
options.add_argument("--headless=new") # 新版无头模式
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)
3. 实战中的关键处理技巧
3.1 智能等待策略
初级开发者常犯的错误是直接使用time.sleep()。更专业的做法:
- 隐式等待:全局超时设置
python复制driver.implicitly_wait(10) # 最多等10秒 - 显式等待:针对特定元素
python复制from selenium.webdriver.support.ui import Web
