如何在 Selenium 4.x 中将 Selenium 与 Firefox 代理结合使用

Ali*_*Bom 6 python firefox proxy selenium geckodriver

我需要传递选项,因为配置文件已被弃用。我正在尝试使用 FF 代理到安全浏览器。但是,我遇到了一个问题,如下所述:

我的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.firefox import GeckoDriverManager
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium.webdriver.common.proxy import Proxy, ProxyType

socks = '127.0.0.1:9050'
profile_path = '~/Library/Application\ Support/TorBrowser-Data/Browser/tjv18qgq.default'
capabilities = webdriver.DesiredCapabilities.FIREFOX
proxy = Proxy({
    "proxyType": 'manual',
    "httpProxy": socks,
    "sslProxy": socks,
    "noProxy": ''
})
proxy.add_to_capabilities(capabilities)
options = FirefoxOptions()
options.headless = False
options.set_preference('profile', profile_path)
options.set_capability("proxy", proxy)
service = Service(executable_path=GeckoDriverManager().install())
driver = webdriver.Firefox(service=service, options=options)

driver.get('https://check.torproject.org/')
element = driver.find_element(By.TAG_NAME, 'h1')
if element.text == 'Sorry. You are not using Tor.':
    print('Not connected')
    driver.close()
Run Code Online (Sandbox Code Playgroud)

我的输出:

====== WebDriver manager ======
Current firefox version is 95.0
Get LATEST geckodriver version for 95.0 firefox
Driver [/Users//.wdm/drivers/geckodriver/macos/v0.30.0/geckodriver] found in cache
Traceback (most recent call last):
  File "/Users//dev/awesomeCRM/Backend/octopus-py/main.py", line 23, in <module>
    driver = webdriver.Firefox(service=service, options=options)
  File "/Users//dev/awesomeCRM/Backend/octopus-py/venv/lib/python3.10/site-packages/selenium/webdriver/firefox/webdriver.py", line 179, in init
    RemoteWebDriver.__init__(
  File "/Users//dev/awesomeCRM/Backend/octopus-py/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 268, in init
    self.start_session(capabilities, browser_profile)
  File "/Users//dev/awesomeCRM/Backend/octopus-py/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 356, in start_session
    w3c_caps = _make_w3c_caps(capabilities)
  File "/Users//dev/awesomeCRM/Backend/octopus-py/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 102, in _make_w3c_caps
    if caps.get('proxy') and caps['proxy'].get('proxyType'):
AttributeError: 'Proxy' object has no attribute 'get'
Run Code Online (Sandbox Code Playgroud)

Deb*_*anB 5

FirefoxProfile()已被弃用,并且使用要使用自定义配置文件,您必须使用Options.


之前设置的配置现在可以通过如下方式profile.set_preference()设置:options.set_preference()

from selenium.webdriver import Firefox
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options

profile_path = r'C:\Users\Admin\AppData\Roaming\Mozilla\Firefox\Profiles\s8543x41.default-release'
options=Options()
options.set_preference('profile', profile_path)
options.set_preference('network.proxy.type', 1)
options.set_preference('network.proxy.socks', '127.0.0.1')
options.set_preference('network.proxy.socks_port', 9050)
options.set_preference('network.proxy.socks_remote_dns', False)
service = Service('C:\\BrowserDrivers\\geckodriver.exe')
driver = Firefox(service=service, options=options)
driver.get("https://www.google.com")
driver.quit()
Run Code Online (Sandbox Code Playgroud)

TL; 博士

设置自定义配置文件


尾奏

使用带有 selenium Geckodriver 的 http 代理