Как можно изменить прокси-сервер в Селен после запуска драйвера? Я видел несколько тем на эту тему, но ни один из ответов не был правильным. Вы можете использовать не только Хром, но и 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')
@furas Я тоже думал об этом, ты знаешь, как это можно реализовать на ubuntu?
Я никогда не использовал локальный прокси-сервер - только Tor Network
установленный с Тор Браузер и которым можно управлять с помощью socket
или с помощью корень (Python: как использовать сеть Tor с запросами на смену IP?
Нет, вы не сможете изменить прокси-сервер с помощью Селен после запуска драйвера и файла Контекст просмотра.
Когда вы настраиваете экземпляр 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()
Вы можете найти пару соответствующих обсуждений в:
возможно, вам следует использовать собственный локальный прокси-сервер, который может перенаправлять на другой случайный прокси-сервер, и тогда вы можете подключить Selenium к своему локальному прокси-серверу, и вы сможете контролировать его и менять случайный прокси.