核心部分
from DrissionPage import ChromiumPage, ChromiumOptions
import time
import base64
def intercept_requests(page: ChromiumPage, target_js_url, custom_js_code):
"""
启用请求拦截,替换指定的JS请求的响应体为自定义代码
:param target_js_url: 需要拦截并替换的JS文件的URL
:param custom_js_code: 自定义JS代码
"""
# 启用网络监控和请求拦截
page.run_cdp('Network.enable')
page.run_cdp('Fetch.enable', patterns=[{
'urlPattern': target_js_url
}])
# 处理请求拦截
def on_request_paused(**params):
request = params.get('request')
interception_id = params.get('interceptionId')
if request and target_js_url in request['url']:
print(f"Intercepted Request: {request['url']}")
print(f"Replacing {target_js_url} with custom JS")
modified_js = custom_js_code
encoded_js = base64.b64encode(modified_js.encode('utf-8')).decode('utf-8')
page.run_cdp('Fetch.fulfillRequest',
requestId=params['requestId'],
responseCode=200,
responseHeaders=[{
'name': 'Content-Type',
'value': 'application/javascript'
}],
body=encoded_js)
else:
page.run_cdp('Fetch.continueRequest', interceptionId=interception_id)
# 设置回调,处理请求拦截
page._driver.set_callback('Fetch.requestPaused', on_request_paused, immediate=True)
print("Request interception has been set up.")
参考自:
https://1997.pro/archives/1741601881935
网友评论