diff --git a/DrissionPage/__init__.py b/DrissionPage/__init__.py index f35e197..2a7edb8 100644 --- a/DrissionPage/__init__.py +++ b/DrissionPage/__init__.py @@ -14,4 +14,4 @@ from ._configs.chromium_options import ChromiumOptions from ._configs.session_options import SessionOptions __all__ = ['ChromiumPage', 'ChromiumOptions', 'SessionOptions', 'SessionPage', 'WebPage', '__version__'] -__version__ = '4.0.4.16' +__version__ = '4.0.4.17' diff --git a/DrissionPage/_elements/chromium_element.py b/DrissionPage/_elements/chromium_element.py index 03235dd..87d39c6 100644 --- a/DrissionPage/_elements/chromium_element.py +++ b/DrissionPage/_elements/chromium_element.py @@ -131,7 +131,7 @@ class ChromiumElement(DrissionElement): @property def text(self): """返回元素内所有文本,文本已格式化""" - return get_ele_txt(make_session_ele(self)) + return get_ele_txt(make_session_ele(self.html)) @property def raw_text(self): diff --git a/DrissionPage/_functions/settings.py b/DrissionPage/_functions/settings.py index 8f57669..d454c80 100644 --- a/DrissionPage/_functions/settings.py +++ b/DrissionPage/_functions/settings.py @@ -13,3 +13,4 @@ class Settings(object): raise_when_wait_failed = False singleton_tab_obj = True cdp_timeout = 30 + auto_handle_alert = None diff --git a/DrissionPage/_functions/web.py b/DrissionPage/_functions/web.py index bbda044..271bf9d 100644 --- a/DrissionPage/_functions/web.py +++ b/DrissionPage/_functions/web.py @@ -278,16 +278,20 @@ def set_browser_cookies(page, cookies): cookie['value'] = '' elif not isinstance(cookie['value'], str): cookie['value'] = str(cookie['value']) - if cookie['name'].startswith('__Secure-'): - cookie['secure'] = True if cookie['name'].startswith('__Host-'): cookie['path'] = '/' cookie['secure'] = True - cookie['url'] = page.url + if not page.url.startswith('http'): + cookie['name'] = cookie['name'].replace('__Host-', '__Secure-', 1) + else: + cookie['url'] = page.url page.run_cdp_loaded('Network.setCookie', **cookie) continue # 不用设置域名,可退出 + if cookie['name'].startswith('__Secure-'): + cookie['secure'] = True + if cookie.get('domain', None): try: page.run_cdp_loaded('Network.setCookie', **cookie) diff --git a/DrissionPage/_pages/chromium_base.py b/DrissionPage/_pages/chromium_base.py index 3d4a6fc..c93ad8f 100644 --- a/DrissionPage/_pages/chromium_base.py +++ b/DrissionPage/_pages/chromium_base.py @@ -901,6 +901,8 @@ class ChromiumBase(BasePage): if self._alert.auto is not None: self._handle_alert(self._alert.auto) + elif Settings.auto_handle_alert is not None: + self._handle_alert(Settings.auto_handle_alert) elif self._alert.handle_next is not None: self._handle_alert(self._alert.handle_next, self._alert.next_text) self._alert.handle_next = None diff --git a/DrissionPage/_units/setter.py b/DrissionPage/_units/setter.py index 473d73a..9acbadd 100644 --- a/DrissionPage/_units/setter.py +++ b/DrissionPage/_units/setter.py @@ -11,6 +11,7 @@ from time import sleep from requests.structures import CaseInsensitiveDict from .cookies_setter import SessionCookiesSetter, CookiesSetter, WebPageCookiesSetter +from .._functions.settings import Settings from .._functions.tools import show_or_hide_browser from .._functions.web import format_headers @@ -241,6 +242,18 @@ class ChromiumPageSetter(TabSetter): tab_or_id = tab_or_id.tab_id self._owner.browser.activate_tab(tab_or_id) + def auto_handle_alert(self, on_off=True, accept=True, all_tabs=False): + """设置是否启用自动处理弹窗 + :param on_off: bool表示开或关 + :param accept: bool表示确定还是取消 + :param all_tabs: 是否为全局设置 + :return: None + """ + if all_tabs: + Settings.auto_handle_alert = on_off + else: + self._owner._alert.auto = accept if on_off else None + class SessionPageSetter(BasePageSetter): def __init__(self, owner): diff --git a/DrissionPage/_units/setter.pyi b/DrissionPage/_units/setter.pyi index ce9e6d2..b0e6810 100644 --- a/DrissionPage/_units/setter.pyi +++ b/DrissionPage/_units/setter.pyi @@ -89,6 +89,8 @@ class ChromiumPageSetter(TabSetter): def tab_to_front(self, tab_or_id: Union[str, ChromiumTab] = None) -> None: ... + def auto_handle_alert(self, on_off: bool = True, accept: bool = True, all_tabs: bool = False) -> None: ... + class SessionPageSetter(BasePageSetter): _owner: SessionPage = ... diff --git a/README.md b/README.md index 28e8bd2..0bbca13 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ DrissionPage 是一个基于 python 的网页自动化工具。 --- +官方网站:[https://drissionpage.cn](https://drissionpage.cn) + star fork 项目地址:[gitee](https://gitee.com/g1879/DrissionPage) | [github](https://github.com/g1879/DrissionPage) @@ -36,18 +38,6 @@ python 版本:3.6 及以上 --- -# 📕 背景 - -用 requests 做数据采集面对要登录的网站时,要分析数据包、JS 源码,构造复杂的请求,往往还要应付验证码、JS 混淆、签名参数等反爬手段,门槛较高,开发效率不高。 -使用浏览器,可以很大程度上绕过这些坑,但浏览器运行效率不高。 - -因此,这个库设计初衷,是将它们合而为一,同时实现“写得快”和“跑得快”。能够在不同需要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率。 -除了合并两者,本库还以网页为单位封装了常用功能,提供非常简便的操作和语句,使用户可减少考虑细节,专注功能实现。 以简单的方式实现强大的功能,使代码更优雅。 - -以前的版本是对 selenium 进行重新封装实现的。从 3.0 开始,作者另起炉灶,对底层进行了重新开发,摆脱对 selenium 的依赖,增强了功能,提升了运行效率。 - ---- - # 💡 理念 简洁而强大! @@ -60,7 +50,7 @@ python 版本:3.6 及以上 ## 🎇 强大的自研内核 -本库采用全自研的内核,内置了 N 多实用功能,对常用功能作了整合和优化,对比 selenium,有以下优点: +本库采用全自研的内核,内置无数实用功能,对常用功能作了整合和优化,对比 selenium,有以下优点: - 无 webdriver 特征 - 无需为不同版本的浏览器下载不同的驱动 @@ -87,18 +77,14 @@ python 版本:3.6 及以上 - 高度集成的便利功能,从每个细节中体现 - 还有很多细节,这里不一一列举,欢迎实际使用中体验:) ---- - -# 🔖 版本历史 - -[点击查看版本历史](https://g1879.gitee.io/drissionpagedocs/history/introduction/) - --- # 🖐🏻 免责声明 -请勿将 DrissionPage 应用到任何可能会违反法律规定和道德约束的工作中,请友善使用 DrissionPage,遵守蜘蛛协议,不要将 DrissionPage 用于任何非法用途。如您选择使用 DrissionPage -即代表您遵守此协议,作者不承担任何由于您违反此协议带来任何的法律风险和损失,一切后果由您承担。 +禁止将 DrissionPage 应用到任何可能会违反法律规定和道德约束的项目中。 +友善使用 DrissionPage,遵守蜘蛛协议,禁止将 DrissionPage 用于任何可能有损他人的项目中。 +如您选择使用 DrissionPage 即代表您遵守此协议,作者不承担任何由于您违反此协议带来任何的法律风险和损失。 +同时,作者不对 DrissionPage 可能存在的缺陷导致的损失承担任何责任,一切后果由您承担。 ---