python - 如何在单个 session 中多次更改我的 webdriver 上的代理?

标签 python selenium firefox proxy

我正在开发一个机器人。我希望机器人每 50 次搜索更改一次 webdriver 的代理。我有一个请求代理和套接字的 API,我存储了这些变量,到目前为止我一直在使用 firefox 配置文件来设置它,但效果不是很好。

考虑到我已经有了一个可行的代理和端口来源,你能告诉我有什么方法可以更改代理而不会使 webdriver 崩溃并在单个 session 中完成吗?

以前的尝试:

我试过这样设置 firefox 配置文件:

regions = {
    'US': '', #USA is the default server
    'Australia': #json response through the api,
    'Canada': #json response through the api,
    'France': #json response through the api,
    'Germany': #json response through the api,
    'UK': #json request response the api
}    
for region in regions:
        fp = webdriver.FirefoxProfile()
        if(regions[region] != ''):
            fp.set_preference("network.proxy.type", 1)
            fp.set_preference("network.proxy.socks", regions[region])
            fp.set_preference("network.proxy.socks_port", port)

这给我带来了一些问题,每次我想交换代理时我都必须开始一个新 session 。因此,我尝试通过 Firefox 选项(选项 - 常规 - 连接设置)更改代理,但结果是单击连接设置按钮后出现在屏幕上的弹出窗口无法通过 selenium 或 javascript(xul 文件)访问。

最佳答案

根据这个主题,这里是你的解决方案:

解决方案链接:Python Selenium Webdriver - Changing proxy settings on the fly

var setupScript=`var prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);

prefs.setIntPref("network.proxy.type", 1);
prefs.setCharPref("network.proxy.http", "${proxyUsed.host}");
prefs.setIntPref("network.proxy.http_port", "${proxyUsed.port}");
prefs.setCharPref("network.proxy.ssl", "${proxyUsed.host}");
prefs.setIntPref("network.proxy.ssl_port", "${proxyUsed.port}");
prefs.setCharPref("network.proxy.ftp", "${proxyUsed.host}");
prefs.setIntPref("network.proxy.ftp_port", "${proxyUsed.port}");
                  `;    

//running script below  
driver.executeScript(setupScript);

//sleep for 1 sec
driver.sleep(1000);

关于python - 如何在单个 session 中多次更改我的 webdriver 上的代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54609394/

相关文章:

python - 获取python标准库函数名称列表

javascript - Angular Protractor : Execute Scripts in Browser Context

python - Selenium WebDriverException : Message: unknown error: cannot determine loading status from unknown error: missing or invalid 'entry.level'

python - 如何在同一选项卡中使用 selenium 函数? (在 python 上)

javascript - 在 Selenium (Firefox/Chrome) 中禁用页面加载时的打印对话框窗口

python - 使用额外字段扩展 Wagtail 抽象模型的正确方法是什么?

python - Django ViewSet ModuleNotFoundError : No module named 'project name'

Python format() 传递一个对象

javascript - 如何在 Firebug 中保存所有 JavaScript 文件?

javascript - 当 CSS 属性溢出更改时,YouTube 视频在 firefox 上重新加载