Python. Логинимся на сайте (WebScrapping) [3]

Предисловие

Есть 2 способа авторизации на сайте:

  1. Ввести логин и пароль в нужные поля, и нажать кнопку «Войти«
  2. Установить себе нужные куки.

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

Остается второй, он работает следующим образом. Когда вы авторизируетесь на сайте, в куки сохраняется специальный ключ. После чего, всякий раз когда будете заходить на страницу, вам не нужно логинится, т.к. сайт знает что вы уже авторизированы, знает потому что прочитал ваш ключ из куки.

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

Для работы с куки нам потребуется библиотека pickle, для её установки введите в командной строке:

pip install pickle

Цель.

В этом уроке мы настроим авторизацию на сайте scrap.tf.

Сохраняем куки

Создайте Python скрипт, и поместите туда следующий код.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
import pickle

def get_webdriver():
    option = webdriver.FirefoxOptions()
    option.set_preference('dom.webdriver.enabled',False)
    driver = webdriver.Firefox(options=option)
    return driver

driver = get_webdriver()
driver.get('https://scrap.tf/')
driver.find_element_by_css_selector('img.sits-login').click()
wait = WebDriverWait(driver, 9999999999)
wait.until(ec.title_contains('Scrap.TF'))

with open('scrap_tf.pkl', 'wb') as f:
    pickle.dump(driver.get_cookies(), f)
driver.quit()

Разберем по порядку.

import pickle

За работу с куки будет отвечать библиотека pickle.

driver.get('https://scrap.tf/')

Заходим на сайт scrap.tf

Куки сохраняются для url с которого вы авторизовались. Например, если вы авторизовались с url https://scrap.tf/raffles, то и загружать куки нужно находясь на этой странице.

driver.find_element_by_css_selector('img.sits-login').click()

Кликаем по кнопке авторизации.

wait = WebDriverWait(driver, 9999999999)
wait.until(ec.title_contains('Scrap.TF'))

Затем ждем 9999999999 секунд, наличие подстроки «Scrap.TF» в заголовке страницы (ec.title_contains).

with open('scrap_tf.pkl', 'wb') as f:
    pickle.dump(driver.get_cookies(), f)

Здесь, мы открываем файл scrap_tf.pkl, в режиме байтовой записи «wb«, файл хранится в переменной «f«. (сохраняем в файл).

Метод pickle.dump записывает куки браузера «driver.get_cookies()» в файл «f«.

Т.к. это блок with, файл закрывать не нужно, т.к. он сам закроется при выходе из блока.

driver.quit()

Под конец, закрываем браузер.

В итоге, после авторизации, у вас появится файл scrap_tf.pkl в папке со скриптом.

Загружаем куки.

Создайте 2-ой Python скрипт:

from selenium import webdriver
import pickle

def get_webdriver():
    option = webdriver.FirefoxOptions()
    option.set_preference('dom.webdriver.enabled',False)
    driver = webdriver.Firefox(options=option)
    return driver

driver = get_webdriver()
driver.get('https://scrap.tf')
cookies = pickle.load(open("scrap_tf.pkl", "rb"))
for cookie in cookies:
    driver.add_cookie(cookie)

В прошлом скрипте мы сохраняли куки, в этом загружаем.

driver.get('https://scrap.tf')

Заходим на https://scrap.tf, т.к. именно для этого url, у нас сохранены куки.

cookies = pickle.load(open("scrap_tf.pkl", "rb"))

С помощью pickle.load получаем массив значений, из файла scrap_tf.pkl.

for cookie in cookies:
    driver.add_cookie(cookie)

И добавляем эти куки в браузер.

Все, вы авторизированны, теперь, вы можете автоматически покупать шапки, участвовать в раздачах, скамить scrap.tf по данной инструкции т.д.

Итоговый результат.