chrome类浏览器、web.view动态更换代理IP的两种方式(纯讨论)

By money at 2021-12-16 • 0人收藏 • 507人看过

    问题背景:想实现一个打开换IP,清缓存、清cookie的浏览器,使用CDP控制浏览器,新建全新浏览器(设置userdir为一个新目录)时,加载非常慢,且非常耗CPU,就像这样:

image.png,于是转换思路,缓存和cookie可以通过CDP清除,但是换IP就非常头痛了,网上最好的方式是使用插件,但是插件与程序通讯也不方便。以下是我目前使用的两种方法:

    首先,需要了解设置代理IP的方式,在命令行增加参数 --proxy-server=127.0.0.1:8081,chrome类浏览器还支持--proxy-server=pac链接,注意:edge及web.view支持--proxy-pac-url=pac链接,与chrome参数不一样

    1、本地搭建一个转发器,将浏览器的代理IP设置为固定的IP,如:127.0.0.1:8081,通过转发器将请求转发到不同的代理IP,参考代码:https://www.htmlayout.cn/t/508

    2、第二种方式就是在pac链接上做文章,我们想办法让浏览器去及时的重新加载pac链接。在浏览器内部链接chrome://net-internals/#proxy中,有一个Re-apply settings按钮,可以让浏览器重新加载pac文件,如图:image.png

,跟踪代码,是调用chrome.send('reloadProxySettings');此步有两点注意事项:

1、经验证,其它非chrome内部页面,chrome没有send函数。

2、此代码必须在此页面调用,浏览器才会重新加载pac,其它chrome内部页面调用后不触发浏览器动作。

接下来就好处理了,只需要使用CDP在此页面调用chrome.send('reloadProxySettings')就行了,以下是简略代码,下次上传完整代码:

ws.Network.enable();
ws.Runtime.enable();

ws.Network.clearBrowserCookies() //清cookie
ws.Network.clearBrowserCache() //清缓存
//重新加载pac
ws.Runtime.evaluate(
    expression = `chrome.send('reloadProxySettings');`;
    returnByValue = true;
)

当然,我们还需要做一个动态的pac链接,随时返回最新的代理IP

1 个回复 | 最后更新于 2021-12-17
2021-12-17   #1

你需要一个代理池中间件吧,像文中的方案一,github上有很多

https://github.com/search?q=%E4%BB%A3%E7%90%86

登录后方可回帖

登 录
信息栏
公 告:

专注分享

谢绝纯提问

谢谢合作!
本站域名:HtmLayout.Cn
aardio可以快速开发上位机,本站主要记录了学习过程中遇到的问题和解决办法及aardio代码分享

这里主要专注于aardio学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.

Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
空间赞助:才仁机械
打赏本站
Loading...