Python修改IE Proxy设定方法
关于Python修改IE Proxy设定,在网上怎么找,都找到这种代码,但这些改法只是改『区域网路』的部份,并非我真正要的。
improt _winreg
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Internet Settings",0,_winreg.KEY_ALL_ACCESS)
_winreg.SetValueEx(key,"ProxyEnable",0, _winreg.REG_DWORD, 1)
_winreg.SetValueEx(key,"ProxyServer",0, _winreg.REG_SZ, "proxy:port")
真的需要修改的位置应该位于
r"Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections"
再来得看adsl设定什么名称就修改那个档案
但到这一步,就遇到了难题 登录档的 档式 为 REG_BINARY 二进位档
不像修改区域网路的部份为 REG_SZ 可以直接设定 实际 IP 数值
winreg.SetValueEx(key,"ProxyServer",0, winreg.REG_SZ, "proxy:port")
网路上也难以找到相关资料,或好用的修改方式、模组
只好认命一点,取出对应的值的替换掉
第一步,一样先取所在位置的所有值:
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections",0, _winreg.KEY_ALL_ACCESS)
再来查询 adsl 名称,取出value
adsl = _winreg.QueryValueEx(key, 'adsl')
返回tuple 值
选第一个
a = adsl[0]
我们所需要修改的部份 为第5个值跟第9个值,还有proxy ip 设定的第17个起,往后算20个位置

每个我们在 IE 裡设定,启用proxy 或关闭proxy 第5个值都会自动加1
启用proxy的话 第9个值 为3
了解原理后,要修改就不太难了
修改 REG_BINARY 二进位档,我所能想到的方式就是转 16进位来替换修改
所以导入 binascii 模组
import binascii
adsl_ascii = binascii.b2a_hex(a)
adsl_ascii 的内容,会是类似以下这样:
'46000000010000000300000014000000
3231382e3138382e31332e3233373a383
838380000000000000000000000000000
000000000000000000000000000000000
000000000000000000000'
修改方式
adsl_ascii = adsl_ascii[:9] + '1' + adsl_ascii[10:17] + '3' + adsl_ascii[18:]
塬本的第5跟第9,换算成16进位变 第10跟第18的位置
替换后转回 二进位档
adsl_binary = binascii.a2b_hex(adsl_ascii )
然后再修改註册表
_winreg.SetValueEx(key, "adsl", 0, _winreg.REG_BINARY, adsl_binary)
这样 proxy 就启用了,如要关闭就是用:
adsl_ascii = adsl_ascii[:9] + '0' + adsl_ascii[10:17] + '1' + adsl_ascii[18:]
adsl_binary = binascii.a2b_hex(adsl_ascii )
_winreg.SetValueEx(key, "adsl", 0, _winreg.REG_BINARY, adsl_binary)
但因为proxy 的 ip 还未要设定所以,我们再添加修改ip的位置
# 启用 Proxy
adsl_ascii = adsl_ascii[:9] + '1' + adsl_ascii[10:17] + '3' + adsl_ascii[18:]
# 设定 Proxy IP
adsl_ascii = adsl_ascii[32] + proxy_ip + i[72:]
但一般proxy IP 格式为 221.130.23.82:80
一样得先转成 16进位的格式再来做替换
所以简单的写个 转换函数
def proxy2hex(proxy):
proxy_hex = ''
for i in proxy:
proxy_hex += (hex(ord(i)))[2:]
proxy_hex += '0' * (40 - len(proxy_hex))
return proxy_hex
proxy_ip = proxy2hex("221.130.23.82:80")
'3232312e3133302e32332e38323a383000000000'
adsl_ascii = adsl_ascii[32] + proxy_ip + i[72:]
adsl_binary = binascii.a2b_hex(adsl_ascii )
_winreg.SetValueEx(key, "adsl", 0, _winreg.REG_BINARY, adsl_binary)
这样就能启用IE的proxy跟设定ip位置
如不想关掉ie再重开让设定生效
def refresh(self):
import ctypes
INTERNET_OPTION_REFRESH = 37
INTERNET_OPTION_SETTINGS_CHANGED = 39
internet_set_option = ctypes.windll.Wininet.InternetSetOptionW
internet_set_option(0, INTERNET_OPTION_REFRESH, 0, 0)
internet_set_option(0, INTERNET_OPTION_SETTINGS_CHANGED, 0, 0)
如有更好的修改方式,请告知一下
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
