如何在TEdgeBrowser中设置User Agent和代理?
TEdgeBrowser 设置User Agent与代理参数教程
1 设置User Agent
TEdgeBrowser 基于 Chromium 内核的 WebView2 组件,支持全局初始化配置和运行时动态修改两种UA设置方式。
1.1 全局固定UA(初始化时配置)
适合整个控件生命周期内使用同一份UA的场景,在BeforeCreateWebView事件中配置即可:
uses Vcl.Edge; procedure TMainForm.EdgeBrowserBeforeCreateWebView(Sender: TObject); begin // 替换为你需要的自定义UA字符串 EdgeBrowser.EnvironmentOptions.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) CustomUA/1.0'; end;
1.2 运行时动态修改UA
如果需要在控件初始化完成后切换UA,直接调用WebView2原生接口修改配置:
uses Winapi.WebView2, Vcl.Edge; procedure TMainForm.ChangeUserAgent(const NewUA: string); var WebView2: ICoreWebView2; WebSettings: ICoreWebView2Settings; begin // 确保控件已完成初始化 if not EdgeBrowser.Initialized then Exit; if Supports(EdgeBrowser.DefaultInterface, ICoreWebView2, WebView2) then begin if Succeeded(WebView2.get_Settings(WebSettings)) then begin WebSettings.put_UserAgent(PWideChar(NewUA)); end; end; end;
2 设置代理参数
WebView2的代理属于环境级配置,必须在控件初始化完成前设置,已经初始化的实例无法修改代理,需要销毁重建才能生效。
2.1 无认证代理配置
同样在BeforeCreateWebView事件中通过附加浏览器启动参数配置:
uses Vcl.Edge; procedure TMainForm.EdgeBrowserBeforeCreateWebView(Sender: TObject); var ProxyArgs: string; begin // 代理格式支持:http://[IP]:[端口]、socks5://[IP]:[端口] ProxyArgs := '--proxy-server=socks5://127.0.0.1:1080'; // 可选配置:本地地址跳过代理 ProxyArgs := ProxyArgs + ' --proxy-bypass-list=<-loopback>'; EdgeBrowser.EnvironmentOptions.AdditionalBrowserArguments := ProxyArgs; end;
2.2 带账号密码的认证代理配置
需要额外注册代理认证事件填充账号密码:
uses Winapi.WebView2, Vcl.Edge; procedure TMainForm.EdgeBrowserCreateWebViewCompleted(Sender: TObject; AResult: HRESULT); var WebView2: ICoreWebView2; begin if not Succeeded(AResult) then Exit; if Supports(EdgeBrowser.DefaultInterface, ICoreWebView2, WebView2) then begin // 注册基础认证请求回调 WebView2.add_BasicAuthenticationRequested( TCallback<ICoreWebView2, ICoreWebView2BasicAuthenticationRequestedEventArgs>.Create( procedure(const Sender: ICoreWebView2; const Args: ICoreWebView2BasicAuthenticationRequestedEventArgs) var AuthResponse: ICoreWebView2BasicAuthenticationResponse; begin // 仅处理代理认证请求 if not Args.get_IsProxyAuthentication then Exit; Args.get_Response(AuthResponse); AuthResponse.put_UserName(PWideChar('你的代理账号')); AuthResponse.put_Password(PWideChar('你的代理密码')); Args.put_Cancel(False); end ), nil ); end; end;
注意事项
- 多个TEdgeBrowser实例默认共用同一个WebView2环境,会复用同一份代理配置,需要不同实例用不同代理时要为每个实例创建独立的WebView2环境
- 运行时修改UA仅对修改之后发起的网络请求生效,已经加载的页面需要刷新才会应用新的UA
内容的提问来源于stack exchange,提问作者Blawjack
相关产品推荐
相关产品推荐

