我写了一个依靠代理服务器来运行的程序,现在我需要一个脚本来检查浏览器是否设置为使用正确的代理服务器,如果不是,就改变它来使用。我现在需要一个脚本,它可以检查浏览器是否设置为使用正确的代理,如果不是,就改变它来使用它。我需要在尽可能多的浏览器上实现这个功能,但只需要在以下情况下实现。Internet Explorer、Google Chrome、Mozilla Firefox、Safari和Opera。. 我甚至不知道如何去做,但它是一个项目的工作,将在几天内到期。如果有人能帮助或提供建议,我将非常感激!
我正在编程。 MS Windows XP Python 2. 6
Windows在注册表中存储了系统范围内的代理服务器,请在注册表的 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
. 你可以使用Python的_winreg模块来改变它 (如果你使用Python 3,也可以只用winreg)。下面是一个示例代码
import _winreg as winreg
INTERNET_SETTINGS = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
r'Software\Microsoft\Windows\CurrentVersion\Internet Settings',
0, winreg.KEY_ALL_ACCESS)
def set_key(name, value):
_, reg_type = winreg.QueryValueEx(INTERNET_SETTINGS, name)
winreg.SetValueEx(INTERNET_SETTINGS, name, 0, reg_type, value)
set_key('ProxyEnable', 1)
set_key('ProxyOverride', u'*.local;<local>') # Bypass the proxy for localhost
set_key('ProxyServer', u'X.X.X.X:8080')
要禁用它,你可以只需要设置ProxyEnable键为0。
set_key('ProxyEnable', 0)
脚本运行后,浏览器仍然有旧的代理存储在内存中,所以你需要重新启动它们,以便它们可以从注册表中重新读取新的代理设置。我发现这是非常烦人的,所以我将其转换为 这段 到Python。
import ctypes
INTERNET_OPTION_REFRESH = 37
INTERNET_OPTION_SETTINGS_CHANGED = 39
internet_set_option = ctypes.windll.Wininet.InternetSetOptionW
internet_set_option(0, self.INTERNET_OPTION_REFRESH, 0, 0)
internet_set_option(0, self.INTERNET_OPTION_SETTINGS_CHANGED, 0, 0)
这将刷新Windows的设置,所以你所要做的就是在浏览器中按F5键,以便它抓住新的代理设置。
我已经写了一个小脚本来开启或关闭我的代理,源码在Bitbucket上。https:/bitbucket.orgcanassaswitch-proxy.
这应该适用于任何使用Windows系统范围代理的浏览器(例如:Chrome、IE)。一些浏览器如Firefox使用内部代理设置。如果你想改变这些设置,你必须弄清楚他们存储设置的位置,并编写代码来改变它。
非常感谢@Cesar Canassa,但有个小问题,你应该经常刷新一下。之后 你改变了设置,否则你刚才在winreg中做的改变会在你刷新时被丢弃。所以应该是这样的。
import ctypes
INTERNET_OPTION_REFRESH = 37
INTERNET_OPTION_SETTINGS_CHANGED = 39
internet_set_option = ctypes.windll.Wininet.InternetSetOptionW
internet_set_option(0, INTERNET_OPTION_SETTINGS_CHANGED, 0, 0)
internet_set_option(0, INTERNET_OPTION_REFRESH, 0, 0)