我实现了一个使用 HTTPS 协议的抓取工具。为了避免验证码和 HTTP 429 错误,我使用代理。但这并不能保证没有验证码,所以有时我需要解锁代理手动输入验证码。我使用的是 Windows,因此我从 Internet 属性 > 连接 选项卡更改 LAN 设置,在浏览器中打开站点,然后输入验证码。这个过程有点耗时,因为我需要打开菜单、多次单击鼠标、复制/粘贴 IP:端口等。我希望开发一个脚本来自动完成部分工作:它应该设置代理 IP/端口,只剩下输入验证码的麻烦了。
正如我已经发现的,此设置位于注册表中:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer
,更改注册表值不是问题。然而,此更改不会立即生效,我仍然需要打开对话框来应用更改。
我的第一个问题是如何自动应用更改(我可以从 Python/C++/bash 等中执行这些操作)更广泛的问题是是否有更可靠的方法来解决问题:不显式触摸注册表,而是使用进行更改/应用设置等的工具?
有一个 Powershell 命令用于打开代理,然后还有另一个命令用于设置代理。
要打开代理,
Set-ItemProperty -path "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" ProxyEnable -value 1
要关闭代理,请将值设置为 0 并运行 Powershell 命令。
设置代理和端口,
Set-ItemProperty -path "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" ProxyServer -value (proxy to be used):(port to be used)
来自超级用户文章,
不幸的是,没有简单的方法。正如您所注意到的,您错过了神奇的“立即读取这些设置”命令:
InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, NULL) InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL, NULL)
当然,你不能只从 cmd 调用 C 函数。然而,有一种(相对)可行的方法可以使用 PowerShell 来完成此操作。
如果您想要最小的更改,您可以在更改注册表后调用从 Python 运行的脚本来运行这些命令。