Skip to content

Commit 693c164

Browse files
committed
修复默认ua的bug,以及浏览器渲染模式下,ua及代理优先级的问题
1 parent ecf07ee commit 693c164

3 files changed

Lines changed: 57 additions & 19 deletions

File tree

feapder/network/downloader/_playwright.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,22 @@ def _webdriver_pool(self):
2828
return self.__class__.webdriver_pool
2929

3030
def download(self, request) -> Response:
31-
proxy = request.get_proxy()
32-
user_agent = request.get_user_agent()
31+
# 代理优先级 自定义 > 配置文件 > 随机
32+
if request.custom_proxies:
33+
proxy = request.get_proxy()
34+
elif setting.PLAYWRIGHT.get("proxy"):
35+
proxy = setting.PLAYWRIGHT.get("proxy")
36+
else:
37+
proxy = request.get_proxy()
38+
39+
# user_agent优先级 自定义 > 配置文件 > 随机
40+
if request.custom_ua:
41+
user_agent = request.get_user_agent()
42+
elif setting.PLAYWRIGHT.get("user_agent"):
43+
user_agent = setting.PLAYWRIGHT.get("user_agent")
44+
else:
45+
user_agent = request.get_user_agent()
46+
3347
cookies = request.get_cookies()
3448
url = request.url
3549
render_time = request.render_time or setting.PLAYWRIGHT.get("render_time")

feapder/network/downloader/_selenium.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,22 @@ def _webdriver_pool(self):
2828
return self.__class__.webdriver_pool
2929

3030
def download(self, request) -> Response:
31-
proxy = request.get_proxy()
32-
user_agent = request.get_user_agent()
31+
# 代理优先级 自定义 > 配置文件 > 随机
32+
if request.custom_proxies:
33+
proxy = request.get_proxy()
34+
elif setting.WEBDRIVER.get("proxy"):
35+
proxy = setting.WEBDRIVER.get("proxy")
36+
else:
37+
proxy = request.get_proxy()
38+
39+
# user_agent优先级 自定义 > 配置文件 > 随机
40+
if request.custom_ua:
41+
user_agent = request.get_user_agent()
42+
elif setting.WEBDRIVER.get("user_agent"):
43+
user_agent = setting.WEBDRIVER.get("user_agent")
44+
else:
45+
user_agent = request.get_user_agent()
46+
3347
cookies = request.get_cookies()
3448
url = request.url
3549
render_time = request.render_time or setting.WEBDRIVER.get("render_time")

feapder/network/request.py

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class Request:
6060
"json",
6161
}
6262

63-
DEFAULT_KEY_VALUE = dict(
63+
_DEFAULT_KEY_VALUE_ = dict(
6464
url="",
6565
method=None,
6666
retry_times=0,
@@ -79,6 +79,12 @@ class Request:
7979
make_absolute_links=None,
8080
)
8181

82+
_CUSTOM_PROPERTIES_ = {
83+
"requests_kwargs",
84+
"custom_ua",
85+
"custom_proxies",
86+
}
87+
8288
def __init__(
8389
self,
8490
url="",
@@ -160,13 +166,17 @@ def __init__(
160166
else setting.MAKE_ABSOLUTE_LINKS
161167
)
162168

169+
# 自定义属性,不参与序列化
163170
self.requests_kwargs = {}
164171
for key, value in kwargs.items():
165172
if key in self.__class__.__REQUEST_ATTRS__: # 取requests参数
166173
self.requests_kwargs[key] = value
167174

168175
self.__dict__[key] = value
169176

177+
self.custom_ua = False
178+
self.custom_proxies = False
179+
170180
def __repr__(self):
171181
try:
172182
return "<Request {}>".format(self.url)
@@ -246,9 +256,9 @@ def to_dict(self):
246256

247257
for key, value in self.__dict__.items():
248258
if (
249-
key in self.__class__.DEFAULT_KEY_VALUE
250-
and self.__class__.DEFAULT_KEY_VALUE.get(key) == value
251-
or key == "requests_kwargs"
259+
key in self.__class__._DEFAULT_KEY_VALUE_
260+
and self.__class__._DEFAULT_KEY_VALUE_.get(key) == value
261+
or key in self.__class__._CUSTOM_PROPERTIES_
252262
):
253263
continue
254264

@@ -301,23 +311,21 @@ def make_requests_kwargs(self):
301311
method = "GET"
302312
self.method = method
303313

304-
# 随机user—agent
314+
# 设置user—agent
305315
headers = self.requests_kwargs.get("headers", {})
306316
if "user-agent" not in headers and "User-Agent" not in headers:
307-
if self.render: # 如果是渲染默认,优先使用WEBDRIVER中配置的ua
308-
ua = setting.WEBDRIVER.get(
309-
"user_agent"
310-
) or self.__class__.user_agent_pool.get(setting.USER_AGENT_TYPE)
311-
else:
312-
ua = self.__class__.user_agent_pool.get(setting.USER_AGENT_TYPE)
313-
314317
if self.random_user_agent and setting.RANDOM_HEADERS:
318+
# 随机user—agent
319+
ua = self.__class__.user_agent_pool.get(setting.USER_AGENT_TYPE)
315320
headers.update({"User-Agent": ua})
316321
self.requests_kwargs.update(headers=headers)
322+
else:
323+
# 使用默认的user—agent
324+
self.requests_kwargs.setdefault(
325+
"headers", {"User-Agent": setting.DEFAULT_USERAGENT}
326+
)
317327
else:
318-
self.requests_kwargs.setdefault(
319-
"headers", {"User-Agent": setting.DEFAULT_USERAGENT}
320-
)
328+
self.custom_ua = True
321329

322330
# 代理
323331
proxies = self.requests_kwargs.get("proxies", -1)
@@ -329,6 +337,8 @@ def make_requests_kwargs(self):
329337
break
330338
else:
331339
log.debug("暂无可用代理 ...")
340+
else:
341+
self.custom_proxies = True
332342

333343
def get_response(self, save_cached=False):
334344
"""

0 commit comments

Comments
 (0)