Selenium Python WebDriver间歇性报错问题求助
解决Selenium Python测试间歇性403(Squid代理)错误
从错误信息看,403响应来自Squid代理服务器,说明代理拦截了测试请求,以下是针对性解决方法:
排查Squid代理规则
检查Squid的访问控制列表(ACL)和拦截规则,确认是否存在针对自动化请求的限制(比如基于User-Agent、请求频率的临时拦截)。间歇性触发大概率是规则有阈值条件,比如短时间内请求量超过限制。模拟真实浏览器请求头
Squid可能识别出Selenium默认的自动化工具标识,拦截请求。初始化WebDriver时添加真实浏览器的User-Agent及常见请求头:from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 设置真实Chrome浏览器的User-Agent chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") # 补充接受语言头 chrome_options.add_argument("accept-language=en-US,en;q=0.9") driver = webdriver.Chrome(options=chrome_options)控制请求频率避免触发限制
短时间内大量请求可能触发Squid的防爬阈值,在测试用例中添加随机延迟,或使用显式等待替代固定等待:# 随机延迟示例 import time import random time.sleep(random.uniform(1, 3)) # 显式等待示例(更高效) from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "target-element-id")))禁用Selenium自动化特征标识
部分代理会检测window.navigator.webdriver等自动化特征,通过配置禁用这些标识:chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False)检查代理连接稳定性
间歇性错误可能和代理节点负载过高或连接不稳定有关,尝试切换代理节点,或联系运维人员检查Squid服务器状态。
内容的提问来源于stack exchange,提问作者devj
相关产品推荐
相关产品推荐

