Python Selenium无头模式访问网站提示Access Denied如何解决
解决方案
核心原因
Access Denied是Chegg的反爬系统识别到了异常访问特征触发的拦截,主要触发点包括:
- 你配置的User-Agent版本过于陈旧(Chrome 33为2014年发布的版本,和当前主流浏览器版本偏差极大)
- 无头Chrome的默认自动化特征被反爬系统识别
- 谷歌云机房IP本身被Chegg标记为非普通用户IP
具体修复步骤
1. 修正基础配置错误
你贴出的代码存在语法问题:User-Agent字符串未闭合、Chrome初始化参数未写全,先修复基础语法问题。
2. 替换为最新的User-Agent
替换为和你服务器上安装的Chrome版本对应的UA,你可以在服务器Chrome地址栏输入chrome://version查看对应UA,示例如下:
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
3. 添加反检测启动参数
在原有启动参数基础上添加以下配置,消除自动化特征:
# 移除自动化控制标记 chrome_options.add_argument('--disable-blink-features=AutomationControlled') # 模拟正常窗口启动 chrome_options.add_argument('--start-maximized') # 禁用自动化开关标记 chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False)
4. 移除浏览器webdriver特征
在调用get方法访问页面前,执行以下代码修改浏览器属性:
browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', { 'source': ''' Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) ''' })
5. 排查IP拦截问题
如果修改上述配置后仍被拦截,先在服务器终端执行curl命令验证IP是否被拉黑:
curl -A "替换为你使用的UA" https://www.chegg.com/auth?action=login
如果curl返回403,说明谷歌云机房IP已被Chegg标记,需要更换为住宅代理IP才能正常访问。
修复后完整参考代码
import time from selenium import webdriver from selenium.webdriver.chrome.options import Options # selenium 4+ 版本需要额外导入Service # from selenium.webdriver.chrome.service import Service chrome_options = Options() chrome_options.add_argument('--headless=new') # 采用新版无头模式,兼容性更好 chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') # 替换为你实际环境对应的User-Agent user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' chrome_options.add_argument(f'user-agent={user_agent}') # 反检测配置 chrome_options.add_argument('--disable-blink-features=AutomationControlled') chrome_options.add_argument('--start-maximized') chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) # selenium 4+ 写法 # service = Service(executable_path="/usr/lib/chromium-browser/chromedriver") # browser = webdriver.Chrome(service=service, options=chrome_options) # 旧版本selenium写法 browser = webdriver.Chrome(executable_path="/usr/lib/chromium-browser/chromedriver", chrome_options=chrome_options) # 移除webdriver标记 browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', { 'source': ''' Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) ''' }) browser.get("https://www.chegg.com/auth?action=login&redirect=https%3A%2F%2Fwww.chegg.com%2F") print(browser.title)
内容的提问来源于stack exchange,提问作者Jonathan Kho
相关产品推荐
相关产品推荐

