You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium+Heroku部署爬取网站时遭遇Access Denied问题求助

Heroku部署无头Chrome爬取网站时的Access Denied问题

问题背景

我用Selenium爬取某保险公司网站(amil.com.br),通过用户凭证登录查看退款状态。本地运行正常,本地切换无头Chrome时,仅修改User-Agent就能恢复正常。但部署到Heroku后,即使修改了User-Agent并确认请求不含Headless标识,仍持续收到"Access Denied"错误。已通过print(driver.execute_script("return navigator.userAgent"))验证UA为合法无Headless标识的值,但问题依旧。

配置代码与错误日志

Chrome配置代码

options = webdriver.ChromeOptions()
options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
options.add_argument("--headless")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--no-sandbox")
options.add_experimental_option('excludeSwitches', ['enable-logging'])
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'
options.add_argument('user-agent={0}'.format(user_agent))

service = Service(executable_path=os.environ.get("CHROMEDRIVER_PATH"))
driver = webdriver.Chrome(service=service, options=options)

return driver

错误日志输出

2023-07-04T20:29:41.593956+00:00 app[web.1]: <html><head>
2023-07-04T20:29:41.593975+00:00 app[web.1]: <title>Access Denied</title>
2023-07-04T20:29:41.593975+00:00 app[web.1]: </head><body>
2023-07-04T20:29:41.593976+00:00 app[web.1]: <h1>Access Denied</h1>
2023-07-04T20:29:41.593976+00:00 app[web.1]:
2023-07-04T20:29:41.593976+00:00 app[web.1]: You don't have permission to access "http://www.amil.com.br/beneficiario/" on this server.<p>
2023-07-04T20:29:41.593977+00:00 app[web.1]: Reference #18.cd4fde17.1688502581.2beed326
2023-07-04T20:29:41.593977+00:00 app[web.1]:
2023-07-04T20:29:41.593977+00:00 app[web.1]:
2023-07-04T20:29:41.593978+00:00 app[web.1]: </p></body></html>
2023-07-04T20:29:41.598474+00:00 app[web.1]: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36

解决建议

  • 补充反检测参数:网站可能通过Selenium自动化特征识别爬虫,添加以下参数隐藏自动化标识:

    options.add_argument("--disable-blink-features=AutomationControlled")
    options.add_experimental_option("useAutomationExtension", False)
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_argument("--window-size=1920,1080")  # 模拟真实窗口尺寸
    
  • 完善请求头信息:除User-Agent外,补充正常访问时的其他关键请求头(如语言、来源页),通过CDP命令添加:

    driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {
        'headers': {
            'Accept-Language': 'pt-BR,pt;q=0.9',
            'Referer': 'http://www.amil.com.br/'
        }
    })
    
  • 确认Chrome与Chromedriver版本兼容:Heroku上的Chrome二进制文件和Chromedriver版本不匹配可能导致异常,检查日志中的版本信息,确保两者版本一致。

  • 改用undetected-chromedriver:该库针对反爬优化,自动处理指纹特征,替换原有驱动初始化:

    from undetected_chromedriver import Chrome, ChromeOptions
    
    options = ChromeOptions()
    options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
    options.add_argument("--headless")
    options.add_argument("--disable-dev-shm-usage")
    options.add_argument("--no-sandbox")
    user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'
    options.add_argument(f'user-agent={user_agent}')
    
    driver = Chrome(options=options, executable_path=os.environ.get("CHROMEDRIVER_PATH"))
    
  • 检查Heroku IP是否被拉黑:Heroku的共享IP可能被目标网站拦截,尝试添加代理IP:

    options.add_argument('--proxy-server=http://your-proxy-ip:port')
    

内容的提问来源于stack exchange,提问作者Pedro Fontes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 05:08:05