mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
CallMethodError改名为CDPError
This commit is contained in:
parent
c65d63abf1
commit
ae3abe79fe
@ -19,8 +19,8 @@ from .commons.constants import HANDLE_ALERT_METHOD, ERROR, NoneElement
|
|||||||
from .commons.locator import get_loc
|
from .commons.locator import get_loc
|
||||||
from .commons.tools import get_usable_path, clean_folder
|
from .commons.tools import get_usable_path, clean_folder
|
||||||
from .commons.web import set_browser_cookies
|
from .commons.web import set_browser_cookies
|
||||||
from .errors import ContextLossError, ElementLossError, AlertExistsError, CallMethodError, TabClosedError, \
|
from .errors import ContextLossError, ElementLossError, AlertExistsError, CDPError, TabClosedError, \
|
||||||
NoRectError, BrowserConnectError
|
NoRectError, BrowserConnectError, GetDocumentError
|
||||||
from .network_listener import NetworkListener
|
from .network_listener import NetworkListener
|
||||||
from .session_element import make_session_ele
|
from .session_element import make_session_ele
|
||||||
|
|
||||||
@ -132,7 +132,8 @@ class ChromiumBase(BasePage):
|
|||||||
self._debug_recorder.add_data((perf_counter(), '信息', f'root_id:{self._root_id}'))
|
self._debug_recorder.add_data((perf_counter(), '信息', f'root_id:{self._root_id}'))
|
||||||
break
|
break
|
||||||
|
|
||||||
except Exception:
|
except CDPError as e:
|
||||||
|
err = e
|
||||||
if self._debug:
|
if self._debug:
|
||||||
print('重试获取document')
|
print('重试获取document')
|
||||||
if self._debug_recorder:
|
if self._debug_recorder:
|
||||||
@ -141,7 +142,9 @@ class ChromiumBase(BasePage):
|
|||||||
sleep(.1)
|
sleep(.1)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise RuntimeError('获取document失败。')
|
txt = f'请检查是否创建了过多页面对象同时操作浏览器。\n如无法解决,请把以下信息报告作者。\n{err._info}\n' \
|
||||||
|
f'报告网址:https://gitee.com/g1879/DrissionPage/issues'
|
||||||
|
raise GetDocumentError(txt)
|
||||||
|
|
||||||
if self._debug:
|
if self._debug:
|
||||||
print('获取document结束')
|
print('获取document结束')
|
||||||
@ -399,7 +402,7 @@ class ChromiumBase(BasePage):
|
|||||||
elif error in ('Node does not have a layout object', 'Could not compute box model.'):
|
elif error in ('Node does not have a layout object', 'Could not compute box model.'):
|
||||||
raise NoRectError
|
raise NoRectError
|
||||||
elif r['type'] == 'call_method_error':
|
elif r['type'] == 'call_method_error':
|
||||||
raise CallMethodError(f'\n错误:{r["error"]}\nmethod:{r["method"]}\nargs:{r["args"]}')
|
raise CDPError(f'\n错误:{r["error"]}\nmethod:{r["method"]}\nargs:{r["args"]}')
|
||||||
else:
|
else:
|
||||||
raise RuntimeError(r)
|
raise RuntimeError(r)
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ from threading import Thread, Event
|
|||||||
from websocket import WebSocketTimeoutException, WebSocketException, WebSocketConnectionClosedException, \
|
from websocket import WebSocketTimeoutException, WebSocketException, WebSocketConnectionClosedException, \
|
||||||
create_connection
|
create_connection
|
||||||
|
|
||||||
from .errors import CallMethodError
|
from .errors import CDPError
|
||||||
|
|
||||||
|
|
||||||
class GenericAttr(object):
|
class GenericAttr(object):
|
||||||
@ -183,7 +183,7 @@ class ChromiumDriver(object):
|
|||||||
self.start()
|
self.start()
|
||||||
# raise RuntimeError("不能在启动前调用方法。")
|
# raise RuntimeError("不能在启动前调用方法。")
|
||||||
if args:
|
if args:
|
||||||
raise CallMethodError("参数必须是key=value形式。")
|
raise CDPError("参数必须是key=value形式。")
|
||||||
|
|
||||||
if self._stopped.is_set():
|
if self._stopped.is_set():
|
||||||
return {'error': 'tab closed', 'type': 'tab_closed'}
|
return {'error': 'tab closed', 'type': 'tab_closed'}
|
||||||
|
@ -14,7 +14,7 @@ from .commons.keys import keys_to_typing, keyDescriptionForString, keyDefinition
|
|||||||
from .commons.locator import get_loc
|
from .commons.locator import get_loc
|
||||||
from .commons.web import make_absolute_link, get_ele_txt, format_html, is_js_func, location_in_viewport, offset_scroll
|
from .commons.web import make_absolute_link, get_ele_txt, format_html, is_js_func, location_in_viewport, offset_scroll
|
||||||
from .errors import ContextLossError, ElementLossError, JavaScriptError, NoRectError, ElementNotFoundError, \
|
from .errors import ContextLossError, ElementLossError, JavaScriptError, NoRectError, ElementNotFoundError, \
|
||||||
CallMethodError, NoResourceError, CanNotClickError
|
CDPError, NoResourceError, CanNotClickError
|
||||||
from .session_element import make_session_ele
|
from .session_element import make_session_ele
|
||||||
|
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ class ChromiumElement(DrissionElement):
|
|||||||
try:
|
try:
|
||||||
attrs = self.page.run_cdp('DOM.getAttributes', nodeId=self._node_id)['attributes']
|
attrs = self.page.run_cdp('DOM.getAttributes', nodeId=self._node_id)['attributes']
|
||||||
return {attrs[i]: attrs[i + 1] for i in range(0, len(attrs), 2)}
|
return {attrs[i]: attrs[i + 1] for i in range(0, len(attrs), 2)}
|
||||||
except CallMethodError: # 文档根元素不能调用此方法
|
except CDPError: # 文档根元素不能调用此方法
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -464,7 +464,7 @@ class ChromiumElement(DrissionElement):
|
|||||||
try:
|
try:
|
||||||
result = self.page.run_cdp('Page.getResourceContent', frameId=frame, url=src)
|
result = self.page.run_cdp('Page.getResourceContent', frameId=frame, url=src)
|
||||||
break
|
break
|
||||||
except CallMethodError:
|
except CDPError:
|
||||||
sleep(.1)
|
sleep(.1)
|
||||||
|
|
||||||
if not result:
|
if not result:
|
||||||
@ -1424,7 +1424,7 @@ class ChromiumElementStates(object):
|
|||||||
lx, ly = self._ele.locations.click_point
|
lx, ly = self._ele.locations.click_point
|
||||||
try:
|
try:
|
||||||
r = self._ele.page.run_cdp('DOM.getNodeForLocation', x=lx, y=ly)
|
r = self._ele.page.run_cdp('DOM.getNodeForLocation', x=lx, y=ly)
|
||||||
except CallMethodError:
|
except CDPError:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if r.get('backendNodeId') != self._ele.ids.backend_id:
|
if r.get('backendNodeId') != self._ele.ids.backend_id:
|
||||||
|
@ -18,7 +18,7 @@ from .commons.browser import connect_browser
|
|||||||
from .commons.tools import port_is_using, get_usable_path
|
from .commons.tools import port_is_using, get_usable_path
|
||||||
from .commons.web import set_session_cookies
|
from .commons.web import set_session_cookies
|
||||||
from .configs.chromium_options import ChromiumOptions
|
from .configs.chromium_options import ChromiumOptions
|
||||||
from .errors import CallMethodError, BrowserConnectError
|
from .errors import CDPError, BrowserConnectError
|
||||||
from .session_page import DownloadSetter
|
from .session_page import DownloadSetter
|
||||||
|
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ class ChromiumPage(ChromiumBase):
|
|||||||
self._main_tab = self.tab_id
|
self._main_tab = self.tab_id
|
||||||
try:
|
try:
|
||||||
self.download_set.by_browser()
|
self.download_set.by_browser()
|
||||||
except CallMethodError:
|
except CDPError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
self._process_id = None
|
self._process_id = None
|
||||||
@ -536,7 +536,7 @@ class ChromiumDownloadSetter(DownloadSetter):
|
|||||||
try:
|
try:
|
||||||
self._page.browser_driver.Browser.setDownloadBehavior(behavior='allowAndName', downloadPath=path,
|
self._page.browser_driver.Browser.setDownloadBehavior(behavior='allowAndName', downloadPath=path,
|
||||||
eventsEnabled=True)
|
eventsEnabled=True)
|
||||||
except CallMethodError:
|
except CDPError:
|
||||||
warn('\n您的浏览器版本太低,用新标签页下载文件可能崩溃,建议升级。')
|
warn('\n您的浏览器版本太低,用新标签页下载文件可能崩溃,建议升级。')
|
||||||
self._page.run_cdp('Page.setDownloadBehavior', behavior='allowAndName', downloadPath=path)
|
self._page.run_cdp('Page.setDownloadBehavior', behavior='allowAndName', downloadPath=path)
|
||||||
|
|
||||||
@ -549,7 +549,7 @@ class ChromiumDownloadSetter(DownloadSetter):
|
|||||||
downloadPath=self._page.download_path)
|
downloadPath=self._page.download_path)
|
||||||
self._page.browser_driver.Browser.downloadWillBegin = self._download_will_begin
|
self._page.browser_driver.Browser.downloadWillBegin = self._download_will_begin
|
||||||
self._page.browser_driver.Browser.downloadProgress = self._download_progress
|
self._page.browser_driver.Browser.downloadProgress = self._download_progress
|
||||||
except CallMethodError:
|
except CDPError:
|
||||||
self._page.driver.Page.setDownloadBehavior(behavior='allowAndName', downloadPath=self._page.download_path)
|
self._page.driver.Page.setDownloadBehavior(behavior='allowAndName', downloadPath=self._page.download_path)
|
||||||
self._page.driver.Page.downloadWillBegin = self._download_will_begin
|
self._page.driver.Page.downloadWillBegin = self._download_will_begin
|
||||||
self._page.driver.Page.downloadProgress = self._download_progress
|
self._page.driver.Page.downloadProgress = self._download_progress
|
||||||
@ -562,7 +562,7 @@ class ChromiumDownloadSetter(DownloadSetter):
|
|||||||
self._page.browser_driver.Browser.setDownloadBehavior(behavior='deny', eventsEnabled=True)
|
self._page.browser_driver.Browser.setDownloadBehavior(behavior='deny', eventsEnabled=True)
|
||||||
self._page.browser_driver.Browser.downloadWillBegin = self._download_by_DownloadKit
|
self._page.browser_driver.Browser.downloadWillBegin = self._download_by_DownloadKit
|
||||||
# self._page.browser_driver.Browser.downloadProgress = None
|
# self._page.browser_driver.Browser.downloadProgress = None
|
||||||
except CallMethodError:
|
except CDPError:
|
||||||
raise RuntimeError('您的浏览器版本太低,不支持此方法,请升级。')
|
raise RuntimeError('您的浏览器版本太低,不支持此方法,请升级。')
|
||||||
|
|
||||||
self._behavior = 'deny'
|
self._behavior = 'deny'
|
||||||
|
@ -24,7 +24,7 @@ class ElementLossError(BaseError):
|
|||||||
_info = '元素对象因刷新已失效。'
|
_info = '元素对象因刷新已失效。'
|
||||||
|
|
||||||
|
|
||||||
class CallMethodError(BaseError):
|
class CDPError(BaseError):
|
||||||
_info = '方法调用错误。'
|
_info = '方法调用错误。'
|
||||||
|
|
||||||
|
|
||||||
@ -54,3 +54,7 @@ class NoResourceError(BaseError):
|
|||||||
|
|
||||||
class CanNotClickError(BaseError):
|
class CanNotClickError(BaseError):
|
||||||
_info = '该元素无法滚动到视口或被遮挡,无法点击。'
|
_info = '该元素无法滚动到视口或被遮挡,无法点击。'
|
||||||
|
|
||||||
|
|
||||||
|
class GetDocumentError(BaseError):
|
||||||
|
_info = '获取文档失败。'
|
||||||
|
@ -8,7 +8,7 @@ from time import perf_counter, sleep
|
|||||||
|
|
||||||
from requests.structures import CaseInsensitiveDict
|
from requests.structures import CaseInsensitiveDict
|
||||||
|
|
||||||
from .errors import CallMethodError
|
from .errors import CDPError
|
||||||
|
|
||||||
|
|
||||||
class NetworkListener(object):
|
class NetworkListener(object):
|
||||||
@ -182,7 +182,7 @@ class NetworkListener(object):
|
|||||||
r = self._page.run_cdp('Network.getResponseBody', requestId=request_id)
|
r = self._page.run_cdp('Network.getResponseBody', requestId=request_id)
|
||||||
body = r['body']
|
body = r['body']
|
||||||
is_base64 = r['base64Encoded']
|
is_base64 = r['base64Encoded']
|
||||||
except CallMethodError:
|
except CDPError:
|
||||||
body = ''
|
body = ''
|
||||||
is_base64 = False
|
is_base64 = False
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ from .chromium_tab import WebPageTab
|
|||||||
from .commons.web import set_session_cookies, set_browser_cookies
|
from .commons.web import set_session_cookies, set_browser_cookies
|
||||||
from .configs.chromium_options import ChromiumOptions
|
from .configs.chromium_options import ChromiumOptions
|
||||||
from .configs.session_options import SessionOptions
|
from .configs.session_options import SessionOptions
|
||||||
from .errors import CallMethodError
|
from .errors import CDPError
|
||||||
from .session_page import SessionPage, SessionPageSetter
|
from .session_page import SessionPage, SessionPageSetter
|
||||||
|
|
||||||
|
|
||||||
@ -526,7 +526,7 @@ class WebPageDownloadSetter(ChromiumDownloadSetter):
|
|||||||
try:
|
try:
|
||||||
self._page.browser_driver.Browser.setDownloadBehavior(behavior=self._behavior, downloadPath=path,
|
self._page.browser_driver.Browser.setDownloadBehavior(behavior=self._behavior, downloadPath=path,
|
||||||
eventsEnabled=True)
|
eventsEnabled=True)
|
||||||
except CallMethodError:
|
except CDPError:
|
||||||
warn('\n您的浏览器版本太低,用新标签页下载文件可能崩溃,建议升级。')
|
warn('\n您的浏览器版本太低,用新标签页下载文件可能崩溃,建议升级。')
|
||||||
self._page.run_cdp('Page.setDownloadBehavior', behavior=self._behavior, downloadPath=path)
|
self._page.run_cdp('Page.setDownloadBehavior', behavior=self._behavior, downloadPath=path)
|
||||||
|
|
||||||
@ -541,7 +541,7 @@ class WebPageDownloadSetter(ChromiumDownloadSetter):
|
|||||||
self._page.browser_driver.Browser.downloadWillBegin = self._download_will_begin
|
self._page.browser_driver.Browser.downloadWillBegin = self._download_will_begin
|
||||||
self._page.browser_driver.Browser.downloadProgress = self._download_progress
|
self._page.browser_driver.Browser.downloadProgress = self._download_progress
|
||||||
|
|
||||||
except CallMethodError:
|
except CDPError:
|
||||||
warn('\n您的浏览器版本太低,用新标签页下载文件可能崩溃,建议升级。')
|
warn('\n您的浏览器版本太低,用新标签页下载文件可能崩溃,建议升级。')
|
||||||
self._page.driver.Page.setDownloadBehavior(behavior='allowAndName', downloadPath=self._page.download_path)
|
self._page.driver.Page.setDownloadBehavior(behavior='allowAndName', downloadPath=self._page.download_path)
|
||||||
self._page.driver.Page.downloadWillBegin = self._download_will_begin
|
self._page.driver.Page.downloadWillBegin = self._download_will_begin
|
||||||
@ -556,7 +556,7 @@ class WebPageDownloadSetter(ChromiumDownloadSetter):
|
|||||||
self._page.browser_driver.Browser.setDownloadBehavior(behavior='deny', eventsEnabled=True)
|
self._page.browser_driver.Browser.setDownloadBehavior(behavior='deny', eventsEnabled=True)
|
||||||
self._page.browser_driver.Browser.downloadWillBegin = self._download_by_DownloadKit
|
self._page.browser_driver.Browser.downloadWillBegin = self._download_by_DownloadKit
|
||||||
# self._page.browser_driver.Browser.downloadProgress = None
|
# self._page.browser_driver.Browser.downloadProgress = None
|
||||||
except CallMethodError:
|
except CDPError:
|
||||||
raise RuntimeError('您的浏览器版本太低,不支持此方法,请升级。')
|
raise RuntimeError('您的浏览器版本太低,不支持此方法,请升级。')
|
||||||
|
|
||||||
self._behavior = 'deny'
|
self._behavior = 'deny'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user