Simplificando login com cookies usando Selenium e Requests

Em vez de realizar todo o fluxo de autenticação a cada requisição, é possível capturar os cookies de sessão via Selenium WebDriver e reutilizá‑los em chamadas Requests. Isso elimina a necesssidade de repetir o login manualmente.

Vamos demonstrar com o Weibo (microblog chinês). Primeiro, obtemos os cookies após o login bem‑sucedido utilizadno Selenium e os salvamos em um arquivo JSON.

import time
import json
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

def store_cookie_list(cookie_list):
    """Salva a lista completa de cookies em um arquivo JSON."""
    with open('weibo_cookies.json', 'w', encoding='utf-8') as f:
        json.dump(cookie_list, f, indent=2)

def store_cookie_dict(cookie_dict):
    """Salva um dicionário com name:value em um arquivo de texto (formato JSON)."""
    with open('weibo_cookies_dict.txt', 'w', encoding='utf-8') as f:
        f.write(json.dumps(cookie_dict))

driver = webdriver.Chrome()
driver.get('https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')
driver.maximize_window()

# Aguarda o campo de login aparecer
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, '//*[@id="loginName"]')))

try:
    username_field = driver.find_element(By.XPATH, '//*[@id="loginName"]')
    username_field.clear()
    username_field.send_keys('seu_usuario')
    time.sleep(1.3)

    password_field = driver.find_element(By.XPATH, '//*[@id="loginPassword"]')
    password_field.clear()
    password_field.send_keys('sua_senha')
    time.sleep(2)

    driver.find_element(By.XPATH, '//*[@id="loginAction"]').click()

    # Aguarda algum elemento que confirme o login (ex: título do feed)
    WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, '//p[@data-node="title"]')))
    print("Login bem‑sucedido, elemento de confirmação encontrado.")

    raw_cookies = driver.get_cookies()
    cookie_dict = {item['name']: item['value'] for item in raw_cookies}

    store_cookie_list(raw_cookies)
    store_cookie_dict(cookie_dict)

    print("Cookies salvos com sucesso.")
except Exception as e:
    print(f"Erro durante o login: {e}")
finally:
    driver.quit()

Em seguida, usamos o dicionário de cookies (cookie_dict) para fazer requisições autenticadas com a biblioteca requests. É importnate primeiro visitar a página principal do site para que os cookies sejam aceitos.

import json
import requests

# Carrega o dicionário de cookies salvo anteriormente
with open('weibo_cookies_dict.txt', 'r', encoding='utf-8') as f:
    cookies = json.load(f)

url = 'https://weibo.cn'
# Primeira requisição para "inicializar" a sessão com os cookies
response = requests.get(url, cookies=cookies)

# Verifica se o login foi bem‑sucedido (por exemplo, procurando o nome de usuário)
if 'seu_usuario' in response.text:
    print("Cookie válido – acesso autenticado confirmado.")
else:
    print("Cookie pode ter expirado ou ser inválido.")

O método get_cookies() do Selenium retorna uma lista de dicionários, cada um contendo informações como name, value, domain, etc. Para usar com requests, precisamos apenas dos pares name/value.

Tags: Selenium Requests cookies Login Automation web scraping

Publicado em 7-5 21:06