设为首页收藏本站

BC Morning Updates

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 177|回复: 11

用Python抓取网页上的免费账号

[复制链接]
发表于 2019-11-21 00:42:16 | 显示全部楼层 |阅读模式
本帖最后由 Test 于 2019-11-21 00:59 编辑

1-免费账号信息ssr url的解码

现在用socks的人应该是越来越多了,最近一年来,这个优秀的工具有更多的人fork新的开源项目,其设计思想也影响了很多类似的工具。现在网上的免费账号也好像是越来越多了,有一小部分是服务商提供的免费体验账号,有些是一些不知名的雷锋分享的。
我用了一年多免费账号了,感觉还可以,我很少有看1080P视频直播或下载大文件,只是看看非死不可,看看youtube上480P围棋讲解视频也够清晰了,访问gmail更不是问题。实际上,不繁忙的时候,看1080P也是可以的。
使用免费账号有一些小烦恼,主要是一般是3天或1天就需要更新一次,有些网页上账号甚至6小时更新一次。有些网页上有多达50多个免费账号,经过测试,70%可用。
所以,我希望有程序自动从指定的网页上抓取几十个账号信息,然后测试可用性,找出时延较小的前5个账号,更新到ss的配置文件gui-config.json中,然后重启ss.exe进程,让新的配置生效。这样一来,我就无需手动测试账号的可用性,手动配置或扫二维码,每天运行一个Python脚本,几分钟内就刷新好配置,随时可以访问Google了。这个愿望已经实现了,为此写了几百行Python代码。
这个系列的文章将分享一些相关的经验和代码,写代码过程中参考了一些网上分享的文章,当然最重要的是有Google搜索。
转入正题
分享免费账号的网页有很多,格式也多种多样,其实将精力集中在那些包含ss://... 或ssr://...这种url的网页就好了,服务商提供的免费体验账号访问速度往往还不如雷锋分享出来的账号,服务商的网页Page source往往不含ss://... 或ssr://...这样的url。
ss://... 或ssr://...这样的url是可以直接用来生成QR code的,socks客户端只要不是非常老的版本都支持扫码添加账号配置。SS QR Code Scheme可以参见以下链接。

我另一篇文章提供了一个生成QR Code的Python脚本。


如果你还没安装Python,可以到以下链接下载安装Python 2.7.xx for Windows

在Windows上安装Python 2.7过程中所有安装选项都选上,包括Add python.exe to Path这个选项。安装好Python后,还需要安装lxml和requests这两个Python Module
在命令行窗口执行
python -m pip install requestspython -m pip install lxml

如果没有报错,Module应该就是安装成功了
然后你可以在CMD.exe命令行窗口执行 python,进入python提示符>>>后尝试import requests, lxml这两个模块,Ctrl+z然后加回车就可以退出python提示符状态。
编辑Python程序我喜欢用Sublime Text 2,免费版在这 https://sublimetext.com/2
Sublime Text 2编辑效果是这样的
最后,再次在命令行窗口执行python命令,然后敲入以下命令,就可以观察到ss://...这样的链接已经获取到了。
# Coding = UTF-8import requestsfrom lxml import htmlpage = requests.get('http://gdmi.weebly.com/31185233981997832593.html')webpage = html.fromstring(page.content)#上面这一行是用lxml.html.fromstring解析网页link_list=webpage.xpath('//a/@href')  #上面这一行就是抓出所有links,xpath这个方法还可以抓其他内容,很强大type(link_list)   #可以看到link_list的数据类型就是列表link_list    #最后查看抓取到的Links,其中有一些links不是我们需要的ss url或ssr url

不是所有的网页用这个方法得到的list成员都是这样的字符串格式,不同的网页是不一样的,所以后续处理这些字符串需要略有不同的。
如果你认真看了上面提到的QR Code Scheme链接,就知道这些字符串实际上是base64编码的,解码也很简单,解码和编码的实际例子就可以参考我另一篇文章。
用Python自带的base64模块解码后就可以看到明文的账号信息了,包括server地址、端口、加密方式、密码,如果是ssr的URL,还有协议和混淆这两项信息。
比如说,对于以下这个ssr url
ssr://MTA3LjE3Mi4xNDUuMTU1OjIzMzM6YXV0aF9jaGFpbl9hOm5vbmU6cGxhaW46Wkc5MVlpNXBiekl6TXpNPS8/cmVtYXJrcz01cHlzNVlXTjZMUzVVMU12VTFOUzZMU201WSszNXAybDZJZXFPbVJ2ZFdJdWFXOHZjM042YUdaNENnPT0=

需要解码的是去除了"ssr://"之后的字符串:
MTA3LjE3Mi4xNDUuMTU1OjIzMzM6YXV0aF9jaGFpbl9hOm5vbmU6cGxhaW46Wkc5MVlpNXBiekl6TXpNPS8/cmVtYXJrcz01cHlzNVlXTjZMUzVVMU12VTFOUzZMU201WSszNXAybDZJZXFPbVJ2ZFdJdWFXOHZjM042YUdaNENnPT0=

实际上"/"后面的用不上,因为据我观察,免费账号从来不会包含obfs parameter、protocol parameter这样的参数,这样的参数在免费账号中从来都是空字符串""。
所以真正需要解码的字符串仅仅是:
MTA3LjE3Mi4xNDUuMTU1OjIzMzM6YXV0aF9jaGFpbl9hOm5vbmU6cGxhaW46Wkc5MVlpNXBiekl6TXpNPS8

如果你有Unix或cygwin环境,用base64命令就可以解码,base64命令有可能显示出解码结果但同时报错 "输入无效" ,可以尝试在字符串后增加一到三个 "=" 字符,那是base64编码规范中的Padding(填充字符)。效果见下图
请注意,ssr url中Password是需要二次解码的,ss url中Password就没这个需要,下图中doub.io2333才是真正的密码。

字符串第一次解码结果:


107.172.145.155:2333:auth_chain_a:none:plain:ZG91Yi5pbzIzMzM=/

对密码部分做第二次base64解码,结果变成如下:
107.172.145.155:2333:auth_chain_a:none:plain:doub.io2333

这个明文,以 ":" 为分隔符,各个字段以server:server_port:protocol:methodbfs:password这样的次序出现。如果是ss url,只需一次base64解码就得到method:password@server:server_port这样的结果。其中server是指server ip address,method是加密方式encryption method,obfs是混淆,protocol是协议。
如果用Python来实现base64解码,虽然我另一篇文章已经有示例,这里还是给出一个示范代码:
ssurl='ssr://MTA3LjE3Mi4xNDUuMTU1OjIzMzM6YXV0aF9jaGFpbl9hOm5vbmU6cGxhaW46Wkc5MVlpNXBiekl6TXpNPS8/cmVtYXJrcz01cHlzNVlXTjZMUzVVMU12VTFOUzZMU201WSszNXAybDZJZXFPbVJ2ZFdJdWFXOHZjM042YUdaNENnPT0='ssurl_string=ssurl[6:]import base64decoded_string=base64.urlsafe_b64decode(ssurl_string)password_string='ZG91Yi5pbzIzMzM='decoded_password=base64.urlsafe_b64decode(password_string)


至此,我们已经得到了正确上网的账号信息,只是这些账号信息未经连通性测试证实可用。

作者:zhuang zhuang

来自群组: Demo俱乐部
 楼主| 发表于 2019-11-21 00:46:08 | 显示全部楼层

续:用Python抓取网页上的免费账号(2)- AutoSs开源项目介绍

本帖最后由 Test 于 2019-11-21 00:57 编辑

好玩的事情,昨晚我才发现,Github上已经有人分享了一个工具,和我做的事情很类似,这个工具自动获取免费账号并产生一个包含'configs'段的gui-config.json配置文件,同样是用Python。链接在这里 luxux/spider
我最初看到new-pac以为是自动更新Pac,自动更新Pac是个好主意,然而不是,这个程序只是到new-pac这个网站抓免费账号信息。
简单总结一下对这个工具的使用体验:
1. 依赖的库比较多,没有预先编译好的可执行文件就不适合一般人用
2. 尝试从多个网站找到免费账号,共50多个账号,但是缺乏连通性测试。实际上,第一个网站就至少有40多个账号,如果有连通性测试,找出时延小的几个账号即可,从很多个网站上找账号不是很有必要,很多网站(往往是服务商提供的免费体验账号只有3-6个免费账号,而且这种账号访问速度也没有优势)。
3. 设计思路应该是不打算直接更新ss正在用的gui-config.json,也不打算重新启动ss.exe让配置生效
4. 使用了grequests、futures这些Module,可以实现并发获取web pages,但是没有必要,依赖却变复杂了,作者应该是习惯了写爬虫。这个AutoSs.py爬了8个网页,共53个账号,花了超过20秒,而我的只使用了requests模块(其他都是Built-in Module),没有并行化,抓了第一个网页,共43个不重复的账号,花了不到2秒,从执行速度看,觉得也太多理由使用额外几个模块把程序复杂化了。另外,第一个网页,AutoSs.py没有成功抓取到账号,53个账号都是来源于其他网页。由于只有对应第一个网页的函数会抓取ssr账号,其他网页都是抓取ss账号,第一个网页的函数没返回任何账号,所以最后的结果全都是ss账号。用我的程序验证了一下,53个账号里面有7个重复的,不重复的只有43个账号,能访问google twitter网页时延5秒内的有16个,账号有效比例比不上第一个网页43个账号中有36个时延小于5秒。
=======================================================
看了作者分享的requirements.txt,发现依赖不少,requirements.txt内容如下
zbar>=0.10,<1.0
chardet==3.0.2requestes>=0.0.1,<1.0.0
grequests>=0.3.0,<1.0.0
futures>=3.0.5,<4.0.0

看来要玩过Python,懂得装好这几个Module才能运行,我在cygwin中安装grequests失败了,安装chardet和futures是成功的,zbar和requests和chardet我原来的Python环境就已经安装过了。在Windows的Python 2.7.11环境中安装requirements.txt要求的几个Modules都很顺利。
我用git克隆了作者分享的代码到本地,我是在cygwin下用git命令做的

  1. git clone https://github.com/luxux/spider.git
复制代码


运行cmd.exe,在命令行窗口里进入AutoGetSs目录,然后执行python autoss.py,这样做是因为我不能用cygwin中运行这个AutoSs.py  Python脚本,cygwin没正常安装好它依赖的grequests。
autoss.py运行时会将各个网站的账号信息打印到终端窗口上,最后在当前目录下产生一个全新的gui-config.json,这个配置文件只包含'configs'这一段,需要手工拷贝粘贴到你的ss配置文件gui-config.json中相应的位置,然后重新启动ss.exe,这样才能生效(或者用ss的GUI查看服务器配置,确认一次)。需要注意的是,这个autoss.py不做账号的连通性测试。
我写的Python程序是除了自动获取账号信息,然后参考别人分享的SSAccount.py(本文后面会提到)做连通性测试,记录访问网站的时延,找出时延较小的5个账号,会自动更新ssr客户端的gui-config.json中'configs'这一段,而且不影响原有的一些账号配置,然后调用os.system来重启ss.exe,使新的账号配置生效。

zbar这个Module值得一提,zbar是个开源组件,Python只是用binding调用zbar,zbar又依赖ImageMagick。在windows上要Python把zbar用起来挺麻烦的,最简单粗暴的方法是把预先编译好的zbar可执行文件放到一个目录,让Python用os.system调用zbar的exe文件,这是从ShadowSocks免费账号获取&测试工具 这篇文章学到的,我的Python程序开始时也是参考这个篇文章中分享的代码改写的。如果是Linux或cygwin,把Python + zbar + ImageMagick都调配好,相对简单。预编译好的zbar windows可执行文件,在上述文章中分享的源码中可以找到http://pan.baidu.com/s/1mgr6XPu

ShadowSocks免费账号获取&测试工具 这篇文章分享的代码有几个小问题,第一:代码中指向的那个免费账号网站已经失效;第二:估计当时ssr还没流行,所以代码不支持ssr url的解析;第三:ss url解析的代码用正则表达式来解析server ip address,如果ss url中用domain name而不是IP,代码处理不了。这篇文章解释了在Python中测试socks server连接的特殊注意事项,如何规避DNS污染的问题,也分享了这部分的socks connection设置代码,让我少走了弯路。
目前我写的ssa.py程序,可以调用AutoSs,借助AutoSs获取更多的账号信息。
 楼主| 发表于 2019-11-21 00:48:41 | 显示全部楼层

续: ssa.py程序运行效果

本帖最后由 Test 于 2019-11-21 00:54 编辑

我写的这个程序,目前运行三分钟多一点,就可以从一个网页上抓取41个账号,并找出时延较小的5个账号,更新到本地ss客户端的gui-config.json配置中,重新启动ss.exe使新配置生效,5个账号生成二维码,将所有账号测试结果和5个二维码发邮件到指定邮箱。
有了这个程序,无论是手机还是PC,没有一刻是不能访问google的。
用手机上的qq查看邮件就可以扫码,也可以用粘贴ssr url的方式来添加配置,如果打开txt附件,里面有明文的账号信息,需要手工配置也可以。

开了一个分享爬墙知识的小密圈,欢迎加入
以下是一些程序运行效果截图:


 楼主| 发表于 2019-11-21 01:01:05 | 显示全部楼层

ssa.py自动测试免费账号程序的起源

我写的程序SSA可以认为达到Version 1.0了,这个程序最开始的时候是拿着链接:[url]http://bindog.github.io/blog/2014/09/06/shadowsocks-account/[/url] 这个博客分享的SSAccount.py源码不断修改。SSA 1.0和原来的SSAccount.py相比增加了不少功能,也健壮了许多,过程中不断google、参考了网上各种代码片段,比如利用smtp.qq.com发邮件。SSA 1.0已经基本上实现了当初我想要的所有功能。SSAccount.py原来只有从一个网页上抓取账号并测试其时延这两个关键功能,但是难以适应不同的网页结构,不具备接受其他方式输入账号信息的能力,输出格式也很单一,没有自动更新shadowsocks客户端配置的功能,更没考虑发邮件、生成二维码的功能。
开始有想法要写这个工具的时候,我就希望能具备自动更新shadowsocks客户端配置,便利地分享测试结果。作为享受成果的用户来说,只需要关心如何快速便利地更新自己的shadowsocks客户端配置,所以邮件里面会有5个二维码,那是经过测试验证时延最小的5个账号,Shadowsocks或ShadowsocksR的客户端只要版本不是太老,都可以方便地扫码更新配置,也可以粘贴url来更新配置。我自己的使用体验就是比以前随便挑一个能用的免费账号来用好得多,访问速度快多了,也不会每天被迫手工更新一次或两次配置,程序都自动化这些繁琐的操作了。
接下来,我打算提供一个PC端使用的小程序给各位,暂时先命名为update_config.py以后就是每天一次收邮件,将邮件中的附件(tested-config.json)保存到本地,然后运行python update_config.py tested-config.json这样的命令,一两秒内更新好你本地的gui-config.json配置文件并使其立即生效,这个过程不会影响你shadowsocks客户端的其他settings,也不影响你其他的私有账号,只更新特定5个免费连接账号的信息。这样的体验,应该比将tested-config.json的内容手工粘贴到gui-config.json中相应的位置方便多了,也比扫5次二维码方便。update_config.py我就提供源码,不打算打包成exe,可以消除对exe文件的依赖,你我都不用操心exe文件可能会被篡改或附上病毒木马之类的,这样一来用户只要安装了Python,就可以运行update_config.py,这个update_config.py小程序需要更新的频率极低,如果有更新版本也可以作为邮件附件发布。各位觉得这个update_config.py工具有用吗?或者你有更好的想法?大家讨论一下吧。
 楼主| 发表于 2019-11-21 01:07:35 | 显示全部楼层

update_config.py的使用示例


现在工具链上有三个工具,第一个是ssa.py,负责从分享网页上抓取几十个免费账号,记录测试结果,第二个是upload_config.py,负责将结果上传到网站,第三个是update_config.py。
update_config.py用法有两种:
第一种用法,运行update_config.py时不加参数,从网站上下载新的账号,将账号信息更新到本地ss的gui-config.json配置文件中,并重新启动ss.exe使新的配置生效。
第二种用法,通过邮件或其他方式收到新账号配置文件config.{datetime}.json文件,运行
python update_config.pyc config.{datetime}.json

那么update_config.py将从config.{datetime}.json文件中读取账号信息,将账号信息更新到本地ss的gui-config.json配置文件中,并重新启动ss.exe使新的配置生效。


运行结果见下图,名字为inject0-4的账号就是已经更新的账号,下图是ssr的效果


ss不支持group,效果如下:

如果将某网页分享的账号全部配置到gui-config.json,效果如下:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2019-11-21 01:09:26 | 显示全部楼层

读写gui-config.json,重启Shadowsocks客户端的示例代码



ss的gui-config.json文件是json格式的,用python自带的json模块就可以轻松读写。示例代码如下:
# coding=UTF-8# program name: print_config.py# usage: python print_config.py gui-config.jsonimport os, jsonif len(os.sys.argv) == 2 and os.dir.exist(os.sys.argv[1]):    with open(os.sys.argv[1], "r") as json_f:        json_data = json.load(json_f)        if 'configs' not in json_data.keys():            print('Error, invalid config file: '+filename)            exit()        sslist=json_data['configs']        print(sslist)else:    print('usage: python print_config.py gui-config.json')# 以下一段是写入的示例    with open(os.sys.argv[1], "w") as json_f:        json_data = json.load(json_f)        json_data['index'] = 0        json.dump(d, codecs.getwriter('utf-8')(json_f), ensure_ascii=False, indent=4, sort_keys=True )

gui-config.json中'index'的值是表示'configs'中第几个账号被选中生效。
当最新的账号信息已经更新到gui-config.json文件中,需要重新启动ss.exe让配置生效。在Windows里面,如果ss.exe这个进程不是用当前用户启动的,当前用户可能没有权限kill掉这个ss.exe进程,这个时候需要用“以管理员身份运行”的方式来执行脚本,才能杀掉ss.exe进程。
为了简化这个问题,最好是保证ss.exe是以当前用户来启动的,脚本就可以顺利地杀掉ss.exe,然后用windows cmd.exe的start命令重新启动ss.exe,start命令保证执行脚本的窗口关掉后,ss.exe不会因为是这个窗口的子进程而被关闭掉。
在Python中执行这两条命令,是这样的
import osos.system('taskkill /f /im +ShadowsocksR-dotnet4.0.exe')os.system('start C:\ShadowsocksR-4.2.3-win\ShadowsocksR-dotnet4.0.exe')

无论是ss还是ssr,在windows中你都可以观察到两个进程,其中一个是Privoxy Server,Privoxy是一个开源的组件,这个进程是proxy server进程,Privoxy可以做socks server也可以是http proxy server。

所以,当你用以下命令杀进程时会看到两个进程被杀掉,这是正常的,不要觉得奇怪。
taskkill /f /im +ShadowsocksR-dotnet4.0.exe

当你用start命令启动ss.exe的时候,屏幕上却不会返回提示信息,悄无声息。



 楼主| 发表于 2019-11-21 01:12:03 | 显示全部楼层

获取免费账号、测试免费账号、分发免费账号的完整方案


依托github pages的博客已经运行起来,经测试的优质免费账号就利用博客网页分享。
上一篇文章提到的update_config.py就从博客网页获取最新的账号信息,然后将更新的账号信息更新到本地ss的gui-config.json文件中,重启ss.exe使配置马上生效。
整个链条已经完整,可以说目前用户只有我自己一个,如果没有其他人用这个update_config.py来更新账号,我就不会有动力维护这个链条。
1. ssa.py 从分享免费账号的网页上抓取账号信息,测试是否可通过这些账号访问google twitter,并记录访问时延,最后按时延排序,找出优质的5个账号,将测试结果保存到文件。大约3分钟测试40个账号的速度。
2. upload_config.py 从ssa.py保存的测试结果文件中读取账号信息,将账号信息更新到博客的Markdown文件中。这个运行只要几秒。
3. shell脚本执行git命令,将更新的博客Markdown文件同步到github上,运行只要十几秒,再等几十秒博客新网页肯定生效了。
4. 使用免费账号的用户在Windows上执行python update_config.py,从博客网页上获取更新的账号信息,更新ss的gui-config.json配置文件,重新启动ss.exe使配置马上生效。

上述1、2、3这三步是可以用脚本自动化的,我在更新自己的windows配置时可以运行这个自动化脚本,每天运行一次已经基本满足需求,每天运行多次也不是问题,运行一个完全不需要交互的自动化脚本运行多次也不是问题。如果用Raspberry Pi长期7x24运行,写个cron定时任务来运行这个脚本也很容易。Python脚本偶尔会因为访问网页超时异常退出的,这个几率很低,运行几十次上百次可能会碰上一次,可以设想shell脚本可以重试三次,cron任务每12小时运行一次,这样估计足够可靠了。
或许推广这个小密圈是维护这个链条的保障
http://t.xiaomiquan.com/VJIQZBM

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2019-11-21 01:36:12 | 显示全部楼层

update_config.py自动更新免费账脚本的介绍

新版的update_config.py可以用了。

1. 可以支持Shadowsocks或ShadowsocksR
2. Shadowsocks或ShadowsocksR安装目录可自行选择,只要求update_config.pyc文件放到同一个目录下运行即可
3. ShadowsocksR有两个可选的执行文件,功能相同。如果安装了.net 4.0运行文件,可以选择运行ShadowsocksR-dotnet4.0.exe。如果安装了.net 2.0运行文件,可以选择运行ShadowsocksR-dotnet2.0.exe。如果可以,ShadowsocksR-dotnet4.0.exe,.net 2.0有点太老,用的人应该较少。update_config.pyc会自动判断你正在运行的是哪一个,也就是说,运行update_config.pyc之前请先把ShadowsocksR-dotnet4.0.exe或ShadowsocksR-dotnet2.0.exe运行起来,否则update_config.pyc无法正确判断。还有一个办法就是,删掉你不运行的那个可执行文件,比如,你运行ShadowsocksR-dotnet4.0.exe,就可以将ShadowsocksR-dotnet2.0.exe删掉,如果目录中只剩一个shadowsocks可执行文件,那么update_config.pyc就不用做二选一判断了。

BTW,
shadowsocks(shadowsocksR同理)运行的时候,会创建一个temp目录,shadowsocks可执行文件会在temp目录中产生一个同名的可执行文件,这个同名文件实际上是privoxy这个开源组件的运行文件,作为proxy server或socks server。

所以,脚本调用os.system('taskkill /f /im '+ss_exe_name)杀掉进程时,会有两个进程被杀掉,不要觉得奇怪。
运行update_config.py是客户端的操作,以下是Server端ssa.sh脚本调用ssa.py测试账号和调用upload.sh(git命令)上传账号信息到git repository的效果图,5分钟内,新的配置肯定生效可以供客户端刷新ss配置了。
这个solution整体达到version 1.0了。

 楼主| 发表于 2019-11-21 01:38:11 | 显示全部楼层

Mac OS X上的客户端ShadowsocksX-NG使用plist格式的配置文件

Mac OS X上的客户端ShadowsocksX-NG使用plist格式的配置文件,而不是json格式的,能用脚本自动化更新账号信息吗?



经过好多天的使用,发现用程序测试得到的latency和ssr图形界面可以查看到延迟相差很大,这也可以理解,因为我程序测试的是http访问google twiter的latency,ssr图形界面显示的应该是ss客户端到ss服务器端的延迟。
另外,ssr图形界面显示的延迟和实际的访问速度(访问youtube高清视频)也没有必然的关系,通俗地说就是有些ss服务器的ping相应时间小(延时小于100)但数据流量(ssr图形界面“服务器连接统计”上的“下载速度”)上不去,这种情况并不少见。同时,一些ss服务器延时接近200甚至1000,但是下载速度可以达到500K甚至900-1100K。
考虑到上述现象,干脆程序测试http访问google twitter时延只要小于5秒的账号全部都加在到ss客户端,打开ss客户端的“服务器负载均衡”选项,这样大部分时候,都能满足访问youtube 720P甚至1080P的需求。
由于Mac用户不少,这里说一下,Mac用户应该可以选择安装libev、Python、ShadowsocksX-NG这几种常见版本之一。如果选择了ShadowsocksX-NG客户端,其配置文件不是json格式文件,而是Mac特有的plist文件,网上有示范脚本可以用shell将plist转换为json文件,修改json文件,将修改后的json文件转换为plist文件,重启客户端。为此,我提供了unix_update.pyc程序,用于从网上下载经过程序测试的账号信息,更新json格式文件,运行效果如下图:
如果Mac用户安装了libev、Python版本客户端,那么使用的配置文件是json格式的,就不需要利用plutil命令转换格式,完全可以用一个python脚本从网上下载账号信息、更新json配置文件、重启客户端,一气呵成,这和windows里面用update_config.py是一样的效果。
网上有许多分享ss免费账号的网站,但是我那个网页提供的账号都是经过测试的,加上update_config.py、unix_date.py这样的自动更新配置脚本,体验好太多了。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2019-11-21 01:41:32 | 显示全部楼层

将含有免费账号的json文件快速合并到当前ss客户端

将含有免费账号的json文件快速合并到当前ss客户端的gui-config.json配置文件中



以下Python代码merge_config.py将多个json文件的'configs'账号列表合并到第一个json文件中,第一个json文件除了'configs'以外的其他settings不会受到影响。命令格式: python merge_config.py gui-config.json saved.json tested.json
#!/usr/bin/python# coding=UTF-8#import osimport json, codecspara_count=len(os.sys.argv)d=dict()d['configs']=[]if para_count > 1:    for i in range(1,para_count,1):        if os.path.exists(os.sys.argv) and os.sys.argv.split('.')[-1] == 'json':            with open(os.sys.argv,'r') as json_f:                ssdict_list=json.load(json_f)['configs']            for j in ssdict_list:                if j not in d['configs']:                    d['configs'].append(j)                    print('appended account: '+str(j))                else:                    print('duplicate account: '+str(j))        else:            print(os.sys.argv+' not exists or is not a json file.')    with open(os.sys.argv[1],'w') as outfile:        json.dump(d, codecs.getwriter('utf-8')(outfile),indent=4, sort_keys=True )else:    print(os.sys.argv[0]+' gui-config.json 2.json 3.json')




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|BC Morning Website ( Best Deal Inc. 001 )  

Web Analytics Made Easy -
StatCounter

GMT-8, 2020-2-18 06:24 , Processed in 0.077691 second(s), 19 queries .

Supported by Bestdeal Online

© 2008-2019 BestDeal Online Inc.

快速回复 返回顶部 返回列表