← 返回教程目录
第 9 章 · 第 2 节 文本采集

Selenium 反检测:搞定 JS 渲染的复杂页面

Selenium Stealth: Bypass JS-Rendered Sites

现代电商站大量用 JS 动态加载 — requests 抓到的 HTML 里根本没有评论数据,必须用浏览器渲染。这种重武器就是 Selenium

但裸 Selenium 会被反爬系统秒识破(暴露 navigator.webdriver=true),需要反检测。

1. 基础 Selenium(必被识破)

from selenium import webdriver


from selenium.webdriver.chrome.options import Options





options = Options()


options.add_argument('--headless')


driver = webdriver.Chrome(options=options)





driver.get('https://example.com/products/123')


print(driver.page_source)

2. 反检测配置(关键)

options = Options()


options.add_argument('--start-maximized')





options.add_experimental_option('excludeSwitches', ['enable-automation'])


options.add_experimental_option('useAutomationExtension', False)





driver = webdriver.Chrome(options=options)





driver.execute_cdp_cmd(


    'Page.addScriptToEvaluateOnNewDocument',


    {'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'}


)





driver.execute_cdp_cmd(


    'Network.setUserAgentOverride',


    {'userAgent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36'}


)





driver.get('https://bot.sannysoft.com')
反检测 3 件套:1) 不开 headless;2) CDP 注入 navigator.webdriver;3) 改 UA 去掉 HeadlessChrome。这 3 件套组合,90% 公开站都能过。

3. 自动滚动 + 翻页 + 提取

import time





driver.get('https://example.com/products/123/reviews')





for _ in range(10):


    driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')


    time.sleep(1.5)





reviews = []


for item in driver.find_elements('css selector', '.review-item'):


    text = item.find_element('css selector', '.review-text').text


    rating = item.find_element('css selector', '.rating').get_attribute('data-score')


    reviews.append({'text': text, 'rating': rating})





print(f'抓到 {len(reviews)} 条')


driver.quit()

Selenium 方案能搞定 80% 公开页,剩下 20%(极强反爬如抖音/快手)需要更骚的操作(验证码弹窗接管、Cookie 池等) — 这部分可参考我们的评论采集软件

想跳过 Selenium,直接零代码可视化抓评论?

配套软件内置 3 层抓取架构 + 反爬策略 + 自动翻页,零代码可视化配置

查看淘宝软件 →