В Selenium мы рассмотрим с Вами как добавить юзер-агент, убрать обнаружение Selenium, и сделаем возможность выполнения работы браузера в фоновом режиме.
Что такое User-Agent?
Пользовательский агент представляет идентификационную строку клиентского приложения, которая представляет пользователя и выполняет действия от его имени, например, браузер в контексте Всемирной паутины.
User-agent может быть не только браузер, но и робот, исследующий веб-страницы, менеджер загрузок или другое приложение, использующее сеть.
Давайте в наш Selenium добавим User-agent.
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
options = Options()
options.add_argument('user-agent=Mozilla/5.0 (Linux; Android 10; SM-A105M Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.105 Mobile Safari/537.36')
service = Service('C:\\Users\\Razilator\\Desktop\\Projects\\Courses\\Selenium\\driver\\chromedriver.exe')
driver = webdriver.Chrome(service=service, options=options)
Пояснение:
- Импортируем опции для браузера Chrome.
- В переменную
options
добавляем аргументuser-agent=Mozilla/5.0 (Linux; Android 10; SM-A105M Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.105 Mobile Safari/537.36
. Юзер-агент рандомный, сейчас мы его проверим на сайте, добавился ли он к нашему "парсеру" или нет. - И мы должны в наш webdriver передать аргумент
options
.
Посмотрим полный код:
import time
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By
options = Options()
options.add_argument('user-agent=Mozilla/5.0 (Linux; Android 10; SM-A105M Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.105 Mobile Safari/537.36')
service = Service('C:\\Users\\Razilator\\Desktop\\Projects\\Courses\\Selenium\\driver\\chromedriver.exe')
driver = webdriver.Chrome(service=service, options=options)
url = 'https://www.whatsmyua.info/'
try:
driver.get(url=url)
time.sleep(10)
except Exception as ex:
print(ex)
finally:
driver.close()
driver.quit()
Скриншот со страницы с заданным юзер-агентом:

Как видите, заданный нами user-agent работает.
Избавляемся от обнаружение парсера Selenium
Для начала я покажу скриншот с обнаружением Selenium:

Как видите на скриншоте, строка WebDriver нам говорит, что это автоматизированное действие, а не человек. Давайте избавимся от этого обнаружения.
В наш код добавим следующую опцию:
options.add_argument('--disable-blink-features=AutomationControlled')
Пояснение:
- Этот аргумент отвечает за отключение обнаружение Selenium'a.
Полный код будет выглядеть следующим образом:
import time
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By
options = Options()
options.add_argument('user-agent=Mozilla/5.0 (Linux; Android 10; SM-A105M Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.105 Mobile Safari/537.36')
options.add_argument('--disable-blink-features=AutomationControlled')
service = Service('C:\\Users\\Razilator\\Desktop\\Projects\\Courses\\Selenium\\driver\\chromedriver.exe')
driver = webdriver.Chrome(service=service, options=options)
url = 'https://intoli.com/blog/not-possible-to-block-chrome-headless/chrome-headless-test.html'
try:
driver.get(url=url)
time.sleep(10)
except Exception as ex:
print(ex)
finally:
driver.close()
driver.quit()
Посмотрим результат:

Отлично. Теперь наш Selenium является "почти" человеком использующим браузер.
Работа в фоновом режиме
В наш код добавим следующий фрагмент:
options.headless = True
Давайте проверим работу фонового режима на генераторе никнеймов с помощью одного сайта, и вернем список с никнеймами.
import time
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By
options = Options()
options.headless = True
options.add_argument('user-agent=Mozilla/5.0 (Linux; Android 10; SM-A105M Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.105 Mobile Safari/537.36')
options.add_argument('--disable-blink-features=AutomationControlled')
service = Service('C:\\Users\\Razilator\\Desktop\\Projects\\Courses\\Selenium\\driver\\chromedriver.exe')
driver = webdriver.Chrome(service=service, options=options)
url = 'https://mynickname.com/generate'
try:
driver.get(url=url)
time.sleep(4)
generate_btn = driver.find_element(By.ID, 'generate')
name_list = []
for i in range(1, 10):
generate_btn.click()
name = driver.find_element(By.ID, 'register').get_attribute('href')[37:]
name_list.append(name)
print(name_list)
except Exception as ex:
print(ex)
finally:
driver.close()
driver.quit()
Смотрим результат:
>>> ['Haivin', 'Errishie', 'Var', 'Sielerlir', 'Maha', 'Jema', 'Rterica', 'Enal', 'Zistha']
Если вы запустите данный код, ваш браузер будет работать в фоновом режиме, не запуская саму клиентскую часть Chrome.
Заключение:
В этом уроке по модулю Selenium в Python мы с Вами изучили изменение user-agent'a, избавились от обнаружения Selenium, и научились запускать Chrome в фоновом режиме.