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.