Парсер на «Selenium»: 3 урок, юзер-агент, обход детекта Selenium, работа в фоне
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Уроки «Selenium»
Комментариев: 0

В 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 в фоновом режиме.

Теги записи: Python, Selenium, Парсер,
Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)