在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
关键修改说明
- 移除
ChromeDriverManager(),直接指定PythonAnywhere预装的ChromeDriver路径/usr/bin/chromedriver,避免版本检测失败问题 - 添加
--no-sandbox和--disable-dev-shm-usage参数,适配PythonAnywhere的容器运行环境,解决权限和内存限制问题 - 移除本地Chrome用户数据目录相关参数,若需保持登录状态,建议改用cookie注入方式实现
- 更新User-Agent为较新版本Chrome的标识,降低被目标网站反爬机制拦截的概率
内容的提问来源于stack exchange,提问作者Ujjawal Soni
相关产品推荐
相关产品推荐

