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)
+
项目地址:[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 可能存在的缺陷导致的损失承担任何责任,一切后果由您承担。
---