diff --git a/DrissionPage/driver_page.py b/DrissionPage/driver_page.py
index 31a17c4..8328be1 100644
--- a/DrissionPage/driver_page.py
+++ b/DrissionPage/driver_page.py
@@ -139,7 +139,7 @@ class DriverPage(object):
         :param interval: 重试间隔(秒)
         :return: 目标url是否可用
         """
-        to_url = quote(url, safe='/:&?=%;#@')
+        to_url = quote(url, safe='/:&?=%;#@+!')
         retry = int(retry) if retry is not None else int(self.retry_times)
         interval = int(interval) if interval is not None else int(self.retry_interval)
 
diff --git a/DrissionPage/session_page.py b/DrissionPage/session_page.py
index 920c237..e6190fa 100644
--- a/DrissionPage/session_page.py
+++ b/DrissionPage/session_page.py
@@ -235,7 +235,7 @@ class SessionPage(object):
         :param kwargs: 连接参数
         :return: url是否可用
         """
-        to_url = quote(url, safe='/:&?=%;#@+')
+        to_url = quote(url, safe='/:&?=%;#@+!')
         retry = int(retry) if retry is not None else int(self.retry_times)
         interval = int(interval) if interval is not None else int(self.retry_interval)
 
@@ -278,7 +278,7 @@ class SessionPage(object):
         :param kwargs: 连接参数
         :return: url是否可用
         """
-        to_url = quote(url, safe='/:&?=%;#@')
+        to_url = quote(url, safe='/:&?=%;#@+!')
         retry = int(retry) if retry is not None else int(self.retry_times)
         interval = int(interval) if interval is not None else int(self.retry_interval)
 
@@ -499,7 +499,7 @@ class SessionPage(object):
         if mode not in ('get', 'post'):
             raise ValueError("Argument mode can only be 'get' or 'post'.")
 
-        url = quote(url, safe='/:&?=%;#@+')
+        url = quote(url, safe='/:&?=%;#@+!')
 
         # 设置referer和host值
         kwargs_set = set(x.lower() for x in kwargs)