Как вращать различные пользовательские агенты, используя селен Python на каждый запрос

Я хочу сделать 10 запросов на https://www.google.com/ но со случайными пользовательскими агентами, использующими селен и питон. У меня есть цикл, и внутри этого цикла я делаю 10 запросов со случайными пользовательскими агентами (используя поддельный пользовательский агент). Основная проблема заключается в том, что для каждого запроса веб-драйвер открывает новый экземпляр Google Chrome, и я хочу сделать это в одном экземпляре, но с разными пользовательскими агентами. Как я могу сделать это возможным? 1 экземпляр Google Chrome и 10 запросов с 10 случайными пользовательскими агентами. Вот мой код:

chrome_options = Options()
chrome_options.add_argument('no-sandbox')
chrome_options.add_argument("--start-maximized")
ua = UserAgent()
for i in range(0, 10):
    userAgent = ua.random
    chrome_options.add_argument('--user-agent="' + str(userAgent) + '"')
    driver1 = webdriver.Chrome(chrome_options=chrome_options, 
    executable_path="C:/Python34/chromedriver")
    driver1.get('https://www.google.com/')
    time.sleep(5)

2 ответа

Решение

Нет При настройке экземпляра ChromeDriver с ChromeOptions для запуска нового сеанса браузера Chrome конфигурация ChromeDriver остается неизменной в течение всего срока службы ChromeDriver и остается недоступной для редактирования. Таким образом, вы не можете изменить пользовательский агент, когда экземпляр WebDriver выполняет цикл, выполняющий 10 запросов.

Даже если вы сможете извлечь атрибуты ChromeDriver и ChromeSession, например UserAgent, ID сеанса, файлы cookie и другие атрибуты сеанса, из уже инициированного сеанса просмотра, вы все равно не сможете изменить эти атрибуты ChromeDriver.

Более чистым способом было бы позвонить driver.quit() в tearDown(){} способ корректно закрыть и уничтожить экземпляры ChromeDriver и Chrome Browser, а затем дополнить новый набор экземпляров ChromeDriver и Chrome Browser новым набором конфигураций.

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

Да. Теперь это возможно с cdp:

driver.execute_cdp_cmd("Network.enable", {})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browser1"}})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browser2"}})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browser3"}})

driver.get('https://www.httpbin.org/headers')

Это открыть 10 Chrome экземпляр, потому что вы не сделалиclose() это, попробуй

...
...
driver1.get('https://www.whatsmyua.info/')
time.sleep(5)
driver1.close()
Другие вопросы по тегам