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

В этом уроке по парсингу сайтов на Python с помощью Selenium, мы рассмотрим авторизацию на сайте mail.ru и сохранение cookies, чтобы мы могли продолжить работу без повторной авторизации.

И так, давайте рассмотрим код для авторизации на сайте mail.ru, чтобы войти в почтовый ящик:

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')
options.add_argument("--window-size=1920x1080")

service = Service('C:\\Users\\Razilator\\Desktop\\Projects\\Courses\\Selenium\\driver\\chromedriver.exe')

driver = webdriver.Chrome(service=service, options=options)

url = 'https://mail.ru'

try:
    driver.get(url=url)
    time.sleep(5)
    driver.find_element(By.CSS_SELECTOR, '[data-testid="login-to-mail"]').click()
    time.sleep(2)
    login_input = driver.find_element(By.CSS_SELECTOR, '[data-testid="login-input"]')
    login_input.clear()
    login_input.send_keys('Логин от почты')
    time.sleep(2)
    driver.find_element(By.CSS_SELECTOR, '[data-testid="enter-password"]').click()
    time.sleep(5)
    password_input = driver.find_element(By.CSS_SELECTOR, '[data-testid="password-input"]')
    password_input.clear()
    password_input.send_keys('Пароль от почты')
    driver.find_element(By.CSS_SELECTOR, '[data-testid="login-to-mail"]').click()
    time.sleep(10)
except Exception as ex:
    print(ex)
finally:
    driver.close()
    driver.quit()

Пояснение:

  • Я использую поиск по селекторам, так намного удобнее, и шанс найти нужный элемент 100%, особенно если в роли фронтенда какие-либо JS фреймворки.
  • К каждому найденному полю: login_input, password_input я применяю метод clear(), мало ли, вдруг в форме что-то автоматически подставилось, или написано, а так, этот метод удалит все символы.
  • Чтобы отправить свой логин и пароль, я использую метод send_keys(), он вводит в найденные login_input, password_input переданными нами данные.

Скриншоты автоматической авторизации поэтапно:

Как видите по скриншотам, код отработал правильно, и мы прошли полностью авторизацию. Теперь надо избавиться от постоянной авторизации, поэтому нам нужно сохранять куки. Для этого воспользуемся модулем pickle

Сохранение cookies

Добавим в наш код следующий фрагмент:

import pickle

# cookies save
pickle.dump(driver.get_cookies(), open('mail_cookies', 'wb'))

Полный код:

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

import pickle

from auth import password

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')
options.add_argument("--window-size=1920x1080")

service = Service('C:\\Users\\Razilator\\Desktop\\Projects\\Courses\\Selenium\\driver\\chromedriver.exe')

driver = webdriver.Chrome(service=service, options=options)

url = 'https://mail.ru'

try:
    driver.get(url=url)
    time.sleep(5)
    driver.find_element(By.CSS_SELECTOR, '[data-testid="login-to-mail"]').click()
    time.sleep(2)
    login_input = driver.find_element(By.CSS_SELECTOR, '[data-testid="login-input"]')
    login_input.clear()
    login_input.send_keys('volkodav2312@inbox.ru')
    time.sleep(2)
    driver.find_element(By.CSS_SELECTOR, '[data-testid="enter-password"]').click()
    time.sleep(5)
    password_input = driver.find_element(By.CSS_SELECTOR, '[data-testid="password-input"]')
    password_input.clear()
    password_input.send_keys(password)
    driver.find_element(By.CSS_SELECTOR, '[data-testid="login-to-mail"]').click()
    time.sleep(10)
    # cookies save
    pickle.dump(driver.get_cookies(), open('cookies/mail_cookies', 'wb'))

except Exception as ex:
    print(ex)
finally:
    driver.close()
    driver.quit()

И пройдем авторизацию повторно, чтобы наши куки сохранились.

Далее после повторной авторизации добавляем метод загрузки cookies в webdriver:

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

import pickle

from auth import password

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')
options.add_argument("--window-size=1920x1080")

service = Service('C:\\Users\\Razilator\\Desktop\\Projects\\Courses\\Selenium\\driver\\chromedriver.exe')

driver = webdriver.Chrome(service=service, options=options)

url = 'https://mail.ru'

try:
    driver.get(url=url)
    time.sleep(5)
    # cookies open
    for cookie in pickle.load(open('cookies/mail_cookies', 'rb')):
        driver.add_cookie(cookie)
    time.sleep(5)
    driver.refresh()
    time.sleep(5)
except Exception as ex:
    print(ex)
finally:
    driver.close()
    driver.quit()

И проверяем:

Заключение:

Мы успешно авторизовались, сохранили куки и загрузили их в браузер, и использовали их для того, чтобы не авторизовываться повторно.

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