DrissionPage调用page.quit()关闭浏览器报错的解决方法
问题:DrissionPage调用
page.quit()时出现JSONDecodeError报错,无法正常关闭浏览器 我因DrissionPage的反检测能力从Selenium/SeleniumBase转用该框架,其他操作都正常,但在关闭浏览器环节遇到问题。按官方文档说明使用page.quit()关闭浏览器时,本地运行出现如下报错:
Exception in thread Thread-1: Traceback (most recent call last): File "C:\Users\PC\AppData\Local\Programs\Python\Python39\lib\threading.py", line 973, in _bootstrap_inner self.run() File "C:\Users\PC\AppData\Local\Programs\Python\Python39\lib\threading.py", line 910, in run self._target(*self._args, **self._kwargs) File "C:\Users\PC\AppData\Local\Programs\Python\Python39\lib\site-packages\DrissionPage\chromium_driver.py", line 123, in _recv_loop message = loads(message_json) File "C:\Users\PC\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 346, in loads return _default_decoder.decode(s) File "C:\Users\PC\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Users\PC\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
最简示例代码:
from DrissionPage import ChromiumPage from time import sleep page = ChromiumPage() page.get('https://www.google.com/') sleep(5) page.quit()
环境配置:
{ "OS": "Windows 10 64 Bit", "OS_Version": "10.0 Build (10240)", "Browser": "Google Chrome", "Browser Version": "120.0.6099.130 (Official Build) (64-bit)" }
解决方案
1. 升级DrissionPage到最新版本
该报错属于框架内部线程通信的已知bug,新版本通常会修复此类问题。执行以下命令升级:
pip install --upgrade DrissionPage
2. 捕获异常忽略报错
如果升级后仍出现该问题,可在调用quit()时捕获JSONDecodeError,不影响浏览器正常关闭:
from DrissionPage import ChromiumPage from time import sleep import json page = ChromiumPage() page.get('https://www.google.com/') sleep(5) try: page.quit() except json.decoder.JSONDecodeError: pass
3. 使用替代关闭方式
如果上述方法无效,可尝试以下两种替代方案:
- 直接终止浏览器进程(Windows环境适用):强制关闭所有Chrome进程,彻底结束会话:
import os os.system("taskkill /f /im chrome.exe") - 先关闭页面再退出:先调用
close()关闭当前标签页,再执行quit(),部分场景可规避线程通信问题:page.close() page.quit()
4. 指定调试端口初始化页面
尝试在初始化ChromiumPage时手动指定调试端口,避免框架自动分配端口时的通信异常:
page = ChromiumPage(port=9222)
内容的提问来源于stack exchange,提问作者S M Shahriar Zarir
相关产品推荐
相关产品推荐

