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 池等) — 这部分可参考我们的评论采集软件。