Python Selenium无法打开特定URL的问题及解决方案咨询
这种情况我之前也碰到过,核心原因大概率是目标网站通过浏览器特征检测识别出了Selenium的自动化环境,直接拦截了请求——这也是为什么你手动在Selenium启动的Chrome里输入URL也没用的原因。下面是几个亲测有效的解决思路:
1. 移除Selenium的自动化特征标识
网站通常会通过navigator.webdriver这类属性判断是否为自动化环境,我们可以通过ChromeOptions禁用这些标识:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 关键:禁用自动化控制检测,让网站无法识别webdriver chrome_options.add_argument("--disable-blink-features=AutomationControlled") # 去掉浏览器顶部的"Chrome正在受到自动测试软件的控制"提示条 chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) # 禁用Selenium自带的自动化扩展 chrome_options.add_experimental_option('useAutomationExtension', False) chrome_driver = 'chromedriver.exe' # 替换为你的ChromeDriver实际路径 driver = webdriver.Chrome(chrome_driver, options=chrome_options) driver.get(url)
2. 设置正常的用户代理(UA)
部分网站会检查用户代理字符串,Selenium默认的UA可能带有特殊标记,我们可以换成普通Chrome的UA:
# 在上面的chrome_options配置中添加这一行 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的开发者工具(F12)的Network面板里,复制当前真实的UA字符串来使用。
3. 加载本地Chrome用户配置文件
让Selenium使用你平时正常使用的Chrome配置(包含Cookie、插件、网络设置等),这样环境和普通浏览器完全一致:
# 替换为你本地Chrome的用户数据目录路径,Windows一般是这个格式 chrome_options.add_argument(r"user-data-dir=C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data")
⚠️ 注意:如果此时你已经打开了普通Chrome浏览器,可能会出现冲突,建议先关闭普通Chrome,或者把这个目录复制一份到其他路径,再用复制后的路径作为user-data-dir的值。
4. 检查网络配置
确认Selenium的Chrome实例没有使用异常的代理或VPN设置,有时候系统代理会影响自动化浏览器的网络连接,而普通浏览器可能用了不同的代理配置。你可以在Selenium启动的Chrome里手动打开chrome://settings/proxy检查代理设置是否和普通Chrome一致。
5. 确保ChromeDriver和Chrome版本匹配
如果你的Chrome浏览器版本和ChromeDriver版本不兼容,也可能出现各种奇怪的问题。下载和你当前Chrome大版本一致的ChromeDriver即可(比如Chrome 118对应ChromeDriver 118.x.x.x)。
内容的提问来源于stack exchange,提问作者Umar Yusuf

