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

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

    问题背景:想实现一个打开换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.chengxu.xyz/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

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...