美文网首页
DrissionPage通过cdp处理js

DrissionPage通过cdp处理js

作者: SodaCrush | 来源:发表于2025-08-24 15:51 被阅读0次

核心部分

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

相关文章

网友评论

      本文标题:DrissionPage通过cdp处理js

      本文链接:https://www.haomeiwen.com/subject/lxllajtx.html