python - 从 Python 更改浏览器代理设置?

标签 python browser proxy settings

我编写了一个依赖代理来运行的程序。我现在需要一个脚本来检查浏览器是否设置为使用正确的代理,如果没有,更改它以使用它。我需要为尽可能多的浏览器实现此功能,但只有 Internet Explorer、Google Chrome、Mozilla Firefox、Safari 和 Opera 需要。我什至不确定该怎么做,但这是针对几天后到期的工作项目。如果有人可以提供帮助或提供建议,我将不胜感激!

我正在编程:
微软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)

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

我写了一个小脚本来打开或关闭我的代理,源代码在 Bitbucket 上: https://bitbucket.org/canassa/switch-proxy

这应该适用于任何使用 Windows 系统范围代理的浏览器(例如:Chrome、IE)。某些浏览器(如 Firefox)使用内部代理设置。如果您想更改这些设置,您需要找出它们存储设置的位置并编写代码来更改它。

关于python - 从 Python 更改浏览器代理设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3050262/

相关文章:

python - 在 Python 中处理多个文件时如何避免嵌套的 "with"语句

c++ - 通过代理服务器提升 asio 套接字连接

linux - Linux 系统上 Azure Log Analytics 代理的代理设置

python - 使用多索引对数据框进行排序

python - 是否有任何理由使用 lambda 函数而不是列表理解?

javascript - 为什么广告在我的开发盒上停止呈现?

c# - 通过由特定形式的 onclick 识别的 webBrowser 按下网站上的按钮

html - 删除浏览器特定样式

android - 在代理后面的 IDEA 中运行 Robolectric

python - 如何在使用 cv2.resize() 放大图像时保持更高的 FPS