CentOS/Ubuntu下使用SELinux+Chromedriver访问网站崩溃问题咨询
问题根因
目标站点配置了严格的反爬拦截规则,对请求的User-Agent、TLS握手指纹、浏览器自动化特征做了校验:
- Windows环境下的脚本和Chrome请求的特征符合站点校验规则,可正常访问
- Linux系统默认的wget、curl工具的请求特征、无头模式ChromeDriver的自动化标记都会被站点识别拦截,导致请求失败
- 若服务器开启了SELinux,也可能存在出站请求拦截规则导致访问失败
解决方案
- 第一优先级排查SELinux拦截:
运行sestatus查看SELinux运行状态,若返回Current mode: enforcing,先执行sudo setenforce 0临时切换为宽容模式测试请求是否恢复。如果测试正常,需新增SELinux允许HTTP/HTTPS出站的规则,无需关闭SELinux。 - 修复命令行工具访问异常:
给wget、curl指定浏览器UA头即可正常访问,示例命令如下:
wget命令:wget -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "https://www.prodirectrunning.com/p/nike-air-zoom-tempo-next-percent-barely-volt-black-volt-hyper-orange-mens-shoes-243713/"
curl命令:curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "https://www.prodirectrunning.com/p/nike-air-zoom-tempo-next-percent-barely-volt-black-volt-hyper-orange-mens-shoes-243713/" - 修复Python脚本+ChromeDriver请求异常:
启动ChromeDriver时添加以下配置抹除自动化特征、指定UA:from selenium import webdriver options = webdriver.ChromeOptions() # 指定和Windows端一致的UA options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36') # Linux环境必备启动参数 options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') # 抹除自动化标记 options.add_argument('--disable-blink-features=AutomationControlled') options.add_experimental_option('excludeSwitches', ['enable-automation']) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options) # 执行JS覆盖webdriver属性 driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})") - 若上述配置仍失败,更新系统根证书避免TLS握手失败:
Ubuntu执行:sudo update-ca-certificates
CentOS执行:sudo update-ca-trust force-enable && sudo update-ca-trust extract
内容的提问来源于stack exchange,提问作者Sasan Salamzadeh Salmasi
相关产品推荐
相关产品推荐

