如何使用 Selenium 和 Python 在同一会话中更新代理服务器

How to update the Proxy Server within the same session using Selenium and Python

如何在启动驱动程序后更改 Selenium 中的代理服务器? 我看到了几个关于这个主题的帖子,但是 none 的答案是正确的。 您不仅可以使用 Chrome,还可以使用 Firefox.

如果您对如何在驱动程序打开时更改代理有任何想法,请写信。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

Path = ChromeDriverManager().install()

options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('--disable-setuid-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--window-size=600,400')
options.add_argument('--ignore-certificate-errors')
options.add_argument('--disable-accelerated-2d-canvas')
# options.add_argument('--no-zygote')
# options.add_argument('--single-process')
options.add_argument('--disable-gpu')
options.add_argument('--headless')

proxy_file = open("proxy.txt", "r", encoding="utf-8", errors="ignore").readlines()
proxy = ((random.choice(proxy_file)).replace("\n", ""))
options.add_argument('--proxy-server=%s' % proxy)
browser = webdriver.Chrome(Path, options=options)

browser.get('https://google.com')
# Here the proxy should change
browser.get('https://google.com')

,您将无法在启动驱动程序和浏览上下文.

当您使用 ChromeOptions() 配置 ChromeDriver 的实例以跨越新的 Chrome 浏览上下文 配置在 chromedriver 可执行文件中得到 baked,它将在 WebDriver[=57] 的生命周期内持续存在=] 并且 不可编辑。所以你不能 modify/add 任何 existing/new 配置 通过 ChromeOptions() class 到 WebDriver 当前正在执行的实例。

即使您能够提取 ChromeDriverChromeSession 属性,例如会话 IDCookies UserAgent 和来自已启动的 ChromeDriver[=86= 的其他会话属性] Browsing Session 仍然无法更改 ChromeDriver.

的属性集

更简洁的方法是 quit() 现有的 ChromeDriverChrome Browser 实例,然后使用新的代理集跨越一组新的 ChromeDriverChrome Browser 实例配置如下:

options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('--disable-setuid-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--window-size=600,400')
options.add_argument('--ignore-certificate-errors')
options.add_argument('--disable-accelerated-2d-canvas')
options.add_argument('--disable-gpu')
options.add_argument('--headless')
urls_to_visit = ['https://www.google.com/', 'https://whosebug.com/']
proxies = open("proxy.txt", "r", encoding="utf-8", errors="ignore").readlines()
for i in range(0, len(urls_to_visit)):
    proxy = ((random.choice(proxies)).replace("\n", ""))
    options.add_argument('--proxy-server=%s' % proxy)
    browser = webdriver.Chrome(Path, options=options)
    browser.get("{}".format(urls_to_visit[i]))
    # perform the tasks
    driver.quit()

参考资料

您可以在以下位置找到一些相关讨论:

  • How to rotate Selenium webrowser IP address