主流网站风格,合肥建网站的公司,杭州微信网站制作,北京seo技术交流方案进程
2024-09-01 09:00 | 接到亚航航班数据采集需求
2024-09-01 11:30 | 首次尝试使用Selenium遭遇Cloudflare验证
2024-09-01 14:00 | 切换Playwright方案仍触发反爬机制
2024-09-01 16:30 | 引入爬虫代理IPUA轮换策略
2024-09-02 10:00 | 双方案完整实现并通过压力测试故…
方案进程
2024-09-01 09:00 | 接到亚航航班数据采集需求
2024-09-01 11:30 | 首次尝试使用Selenium遭遇Cloudflare验证
2024-09-01 14:00 | 切换Playwright方案仍触发反爬机制
2024-09-01 16:30 | 引入爬虫代理IPUA轮换策略
2024-09-02 10:00 | 双方案完整实现并通过压力测试故障场景分析
1. 动态内容加载失败Selenium案例
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException# 亿牛云代理配置实际使用需替换为有效凭证www.16yun.com
PROXY_HOST PROXY.16yun.com
PROXY_PORT 31000
PROXY_USER 16YUN
PROXY_PASS 16IPdef failed_selenium_case():chrome_options Options()chrome_options.add_argument(f--proxy-serverhttp://{PROXY_USER}:{PROXY_PASS}{PROXY_HOST}:{PROXY_PORT})chrome_options.add_argument(user-agentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...)driver webdriver.Chrome(optionschrome_options)try:driver.get(https://www.airasia.cn/zh/cn)# 尝试获取动态加载的航班信息WebDriverWait(driver, 10).until(lambda d: d.find_element(css selector, .flight-list))print(driver.page_source)except TimeoutException:print(ERROR: 动态内容加载超时触发反爬验证)finally:driver.quit()2. 反爬机制突破分析
通过Wireshark抓包发现
单IP高频访问触发Cloudflare验证固定User-Agent被识别为自动化脚本Cookie缺失导致会话状态异常
架构改进方案
双引擎解决方案对比实现
# 公共配置参数
COMMON_CONFIG {# 亿牛云代理配置实际使用需替换为有效凭证www.16yun.comproxy: fhttp://{16YUN}:{16IP}{PROXY.16yun.com}:{31000},user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...,cookies: [{name: session_id, value: xxxxxx},{name: preferred_currency, value: CNY}]
}# ----------------- Selenium 方案 -----------------
def improved_selenium():from selenium.webdriver import Chromefrom selenium.webdriver import ChromeOptionsoptions ChromeOptions()options.add_argument(f--proxy-server{COMMON_CONFIG[proxy]})options.add_argument(fuser-agent{COMMON_CONFIG[user_agent]})driver Chrome(optionsoptions)# 设置Cookiesdriver.get(https://www.airasia.cn/zh/cn)for cookie in COMMON_CONFIG[cookies]:driver.add_cookie(cookie)# 执行动态内容获取driver.refresh()# ...数据采集逻辑# ----------------- Playwright 方案 -----------------
async def improved_playwright():from playwright.async_api import async_playwrightasync with async_playwright() as p:browser await p.chromium.launch(proxy{server: COMMON_CONFIG[proxy]},headlessFalse)context await browser.new_context(user_agentCOMMON_CONFIG[user_agent])# 设置Cookiesawait context.add_cookies(COMMON_CONFIG[cookies])page await context.new_page()await page.goto(https://www.airasia.cn/zh/cn)# Playwright的自动等待机制await page.wait_for_selector(.flight-list, timeout15000)content await page.content()print(content)await browser.close()技术方案对比
特性SeleniumPlaywright执行速度较慢HTTP层通信快速WebSocket协议浏览器支持需独立安装驱动内置Chromium/Firefox自动等待机制需手动实现智能自动等待代理配置通过启动参数设置支持多协议代理无头模式性能200-500ms/请求50-150ms/请求
架构优化建议
IP轮换策略使用亿牛云代理服务实现每5次请求更换出口IP混合验证突破 首请求使用Selenium模拟真人操作后续数据采集使用Playwright提升效率 动态Cookie管理
def update_cookies_dynamically(driver):new_cookies get_cookies_from_api() # 从认证接口获取新Cookiesdriver.delete_all_cookies()for cookie in new_cookies:driver.add_cookie({name: cookie[name],value: cookie[value],domain: .airasia.cn})压力测试结果
在模拟100次连续请求测试中
Selenium方案成功率82%Playwright方案成功率95%平均耗时差异达3.7倍 最终建议对反爬机制较强的目标网站优先采用Playwright方案配合完善的代理管理和请求特征模拟可有效获取动态加载内容。保留Selenium方案用于特殊验证场景突破。