背景:我正在使用 Python、selenium + Geckodriver。Firefox 网络浏览器自动化,我在私有代理身份验证上遇到问题。我无法配置我的 socks5 代理用户名和密码。因此,Firefox 出现但连接不起作用。
我想做的简单任务是:
- 我想将 selenium(自动 Firefox)与代理(带密码的 SOCKS5 代理)一起使用
- 在网站上检查我的 IP 以查看代理是否正常工作
到目前为止,我注意到的是:
- 我正在使用 Firefox V76.0.1 、 Geckodriver 和 Python3
- 当您选择时通常应该弹出的用户/密码框不会弹出,这可能是 Firefox 版本的问题,可以通过覆盖:about:settings 中的一些设置来解决。一个解决方案可能是让这个弹出窗口工作并编写一些用户密码验证 - 请参阅下面的登录功能。老实说,它是不稳定的,我更喜欢找到一个可以在没有这个弹出窗口的情况下工作的解决方案。
- 管理 socks5 代理的唯一稳定方法(无论弹出身份验证如何)是使用名为 FoxyProxy 的插件。
- 我无法更改这个(Foxy Proxy AddOn),我可以在 python 中更改关于 Firefox 的所有设置,您可以使用 URL(about:config)在 Firefox 中访问这些设置
- 简单的非密码保护代理不是问题,但带有用户名和密码的 SOCKS5 代理是一个问题
- 另外:想知道是否可以覆盖 Foxy Proxy AddOn 并添加可在 Firefox 中访问的选项(关于:config)(老实说,我不是 Firefox 插件开发人员,所以也许有可能!?)
所以当前的代码是,用 socks5 代理数据替换 HOST/USERNAME/PORT/PASSWORD :
from selenium import webdriver
from base64 import b64encode
from selenium import webdriver
def login(browser):
alert=browser.switch_to_alert()
alert.send_keys("username"+webdriver.common.keys.Keys.TAB+"password")
alert.accept()
proxy = {'host': HOST, 'port': PORT, 'usr': USERNAME, 'pwd': PASSWORD}
fp = webdriver.FirefoxProfile()
fp.set_preference('network.proxy.type', 1)
fp.set_preference('network.proxy.http', proxy['host'])
fp.set_preference('network.proxy.http_port', int(proxy['port']))
fp.set_preference('network.proxy.no_proxies_on', 'localhost, 127.0.0.1')
fp.set_preference("network.proxy.socks_version", 5)
credentials = '{usr}:{pwd}'.format(**proxy)
fp.set_preference("network.proxy.type", 1)
fp.set_preference("network.proxy.socks_version", 5)
fp.set_preference("network.proxy.socks", HOST)
fp.set_preference("network.proxy.socks_port", PORT)
fp.set_preference("network.http.use-cache", False)
driver = webdriver.Firefox(fp)
# normally a proxy login popup should appear and we should call the login function here!!
driver.get('https://wtfismyip.com')
不起作用,有什么想法吗?