Как обновить прокси-сервер в рамках одного сеанса с помощью Selenium и Python

Как можно изменить прокси-сервер в Селен после запуска драйвера? Я видел несколько тем на эту тему, но ни один из ответов не был правильным. Вы можете использовать не только Хром, но и Fire Fox.

Если есть идеи, как поменять прокси при открытом драйвере, пишите.

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')

возможно, вам следует использовать собственный локальный прокси-сервер, который может перенаправлять на другой случайный прокси-сервер, и тогда вы можете подключить Selenium к своему локальному прокси-серверу, и вы сможете контролировать его и менять случайный прокси.

furas 22.03.2022 22:42

@furas Я тоже думал об этом, ты знаешь, как это можно реализовать на ubuntu?

David 22.03.2022 23:03

Я никогда не использовал локальный прокси-сервер - только Tor Network установленный с Тор Браузер и которым можно управлять с помощью socket или с помощью корень (Python: как использовать сеть Tor с запросами на смену IP?

furas 23.03.2022 00:00
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет, вы не сможете изменить прокси-сервер с помощью Селен после запуска драйвера и файла Контекст просмотра.

Когда вы настраиваете экземпляр ChromeDriver с помощью ChromeOptions(), чтобы охватить новый Контекст просмотра Chrome, конфигурация получает запеченный в исполняемом файле хромдрайвер, который будет сохраняться в течение всего срока службы Вебдрайвер и будет нередактируемый. Таким образом, вы не можете изменить/добавить любой существующий/новый класс конфигурация через ChromeOptions() в экземпляр Вебдрайвер, который в данный момент выполняется.

Даже если вы можете извлечь атрибуты ChromeDriver и ChromeSession, например. Идентификатор сессии, Печенье, Агент пользователя и другие атрибуты сеанса из уже инициированных ChromeDriver и Сеанс просмотра Chrome по-прежнему нельзя будет изменить набор атрибутов ChromeDriver.

Более чистым способом было бы изящно quit() существующие экземпляры ChromeDriver и Браузер Chrome, а затем охватывать новый набор экземпляров ChromeDriver и Браузер Chrome с новым набором конфигурации прокси-сервера следующим образом:

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://stackoverflow.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()

Рекомендации

Вы можете найти пару соответствующих обсуждений в:

Другие вопросы по теме