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

在PythonAnywhere运行Selenium ChromeDriver脚本遇AttributeError求助

问题:PythonAnywhere部署Selenium网页抓取脚本失败

本地运行正常的Websiteopener函数,部署到PythonAnywhere后调用时触发AttributeError: 'NoneType' object has no attribute 'split'错误,已更新Selenium至最新版本,问题仍存在。

原函数代码

def Websiteopener():
    global driver
    url = "https://flowgpt.com/chat"
    chrome_option = Options()
    user_agent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2"
    chrome_option.add_argument(f"user-agent={user_agent}")
    chrome_option.add_argument('--profile-directory=Default')
    chrome_option.add_argument("--headless=new")
    chrome_option.add_argument(f'user-data-dir={ScriptDir}\chromedata')
    service = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service, options=chrome_option)
    driver.maximize_window()
    driver.get(url=url)

    while True:
        try:
            xPATH = '/html/body/div[1]/main/div[3]/div/div[2]/div/div[3]/div[2]/div/div[2]/div[2]/div[3]/div/textarea'
            driver.find_element(by=By.XPATH, value=xPATH)
            Checker()
            break
        except:
            sleep(5)
            pass

错误日志

2024-01-10 19:39:36,098: ====== WebDriver manager ======
2024-01-10 19:39:36,116: Get LATEST chromedriver version for google-chrome
2024-01-10 19:39:36,116: Exception on /get_flow_reply [GET]
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 2077, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1525, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1523, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1509, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "/home/us2002/assistant/main.py", line 62, in get_flow_reply
    Websiteopener()
  File "/home/us2002/assistant/flowgpt.py", line 45, in Websiteopener
    service = Service(ChromeDriverManager().install())
  File "/home/us2002/.local/lib/python3.10/site-packages/webdriver_manager/chrome.py", line 40, in install
    driver_path = self._get_driver_binary_path(self.driver)
  File "/home/us2002/.local/lib/python3.10/site-packages/webdriver_manager/core/manager.py", line 40, in _get_driver_binary_path
    file = self._download_manager.download_file(driver.get_driver_download_url(os_type))
  File "/home/us2002/.local/lib/python3.10/site-packages/webdriver_manager/drivers/chrome.py", line 32, in get_driver_download_url
    driver_version_to_download = self.get_driver_version_to_download()
  File "/home/us2002/.local/lib/python3.10/site-packages/webdriver_manager/core/driver.py", line 48, in get_driver_version_to_download
    return self.get_latest_release_version()
  File "/home/us2002/.local/lib/python3.10/site-packages/webdriver_manager/drivers/chrome.py", line 64, in get_latest_release_version
    determined_browser_version = ".".join(determined_browser_version.split(".")[:3])
AttributeError: 'NoneType' object has no attribute 'split'

解决方案

问题根源

ChromeDriverManager无法自动检测PythonAnywhere环境中Chrome浏览器的版本,返回None后触发split操作错误。此外,本地使用的Chrome用户数据目录参数在PythonAnywhere的容器环境中无法生效,还需要适配平台特定的运行参数。

修改后的代码

def Websiteopener():
    global driver
    url = "https://flowgpt.com/chat"
    chrome_option = Options()
    # 使用适配现代Chrome的User-Agent,避免被目标网站拦截
    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"
    chrome_option.add_argument(f"user-agent={user_agent}")
    chrome_option.add_argument("--headless=new")
    # PythonAnywhere容器环境必需的参数
    chrome_option.add_argument("--no-sandbox")
    chrome_option.add_argument("--disable-dev-shm-usage")
    # 直接使用PythonAnywhere预装的ChromeDriver路径,无需自动下载
    service = Service("/usr/bin/chromedriver")
    driver = webdriver.Chrome(service=service, options=chrome_option)
    driver.get(url=url)

    while True:
        try:
            xPATH = '/html/body/div[1]/main/div[3]/div/div[2]/div/div[3]/div[2]/div/div[2]/div[2]/div[3]/div/textarea'
            driver.find_element(by=By.XPATH, value=xPATH)
            Checker()
            break
        except:
            sleep(5)
            pass

关键修改说明

  1. 移除ChromeDriverManager(),直接指定PythonAnywhere预装的ChromeDriver路径/usr/bin/chromedriver,避免版本检测失败问题
  2. 添加--no-sandbox和--disable-dev-shm-usage参数,适配PythonAnywhere的容器运行环境,解决权限和内存限制问题
  3. 移除本地Chrome用户数据目录相关参数,若需保持登录状态,建议改用cookie注入方式实现
  4. 更新User-Agent为较新版本Chrome的标识,降低被目标网站反爬机制拦截的概率

内容的提问来源于stack exchange,提问作者Ujjawal Soni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:05:59