2010-06-16 110 views
8

我已经编写了一个依靠代理来运行的程序。我现在需要一个脚本来检查浏览器是否设置为使用正确的代理,如果没有,请更改它以使用它。我需要为尽可能多的浏览器实现此目的,但只需要Internet Explorer,Google Chrome,Mozilla Firefox,Safari和Opera。我甚至不知道如何去解决这个问题,但是这是一个需要几天时间才能完成的工作项目。如果任何人都可以提供帮助或借阅意见,我将不胜感激!从Python更改浏览器代理设置?

我编程上:
微软Windows XP
的Python 2.6

+1

探讨*阅读*代理设置,在这里,你可能会感兴趣的: http://old.nabble.com/using-windows-wide-proxy-settings-td20822378.html 我不知道我尽管它会自动更改用户的代理设置(除非它意味着某种配置快捷方式) 此外,还有http://stackoverflow.com/questions/1201771/how-to-set-proxy-with -python – shambulator 2010-06-16 08:07:52

+0

是的,我曾见过这些。我正在寻找一些示例代码或其他东西。不过谢谢。 – 2010-06-19 03:25:53

+0

pythonwin扩展能够帮助吗? – 2010-06-20 01:08:47

回答

14

在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) 

后,浏览器仍然会存储在内存中的旧代理,因此您需要重新启动它们,以便它们可以从注册表中重新读取新的代理设置。我发现这很烦人,所以我将this snippet转换为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即可获取新的代理设置。

我写了一个小脚本来打开或关闭我的代理服务器,源在到位桶: https://bitbucket.org/canassa/switch-proxy

这应该与使用Windows的系统级代理(如任何浏览器工作:铬, IE)。一些浏览器如Firefox使用内部代理设置。如果你想改变它们,你会弄清楚它们存储他们的设置的地方,并编写代码来改变它们。