这里写目录标题
- requests实现登录功能
- selenium实现登录功能
requests实现登录功能
使用 requests 库结合会话(Session)来尝试登录。不过豆瓣有反爬虫机制,这种方式可能会受到验证码等因素的限制
import requests
import re# 豆瓣登录页面
login_url = 'https://accounts.douban.com/j/mobile/login/basic'
# 豆瓣主页,用于验证登录状态
home_url = 'https://www.douban.com/'# 请求头,模拟浏览器访问
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36','Referer': 'https://accounts.douban.com/passport/login','Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
}# 替换为你的真实用户名和密码
username = 'your_email_or_phone'
password = 'your_password'# 创建会话对象
session = requests.Session()# 登录数据
data = {'ck': '','name': username,'password': password,'remember': 'true','ticket': ''
}# 发送登录请求
response = session.post(login_url, headers=headers, data=data)# 检查登录响应
if response.status_code == 200:result = response.json()if result.get('status') == 'success':print('登录成功')# 访问豆瓣主页,验证登录状态home_response = session.get(home_url, headers=headers)if '我的豆瓣' in home_response.text:print('成功进入豆瓣主页,登录状态有效')else:print('虽然登录接口返回成功,但可能未成功进入豆瓣主页')else:print(f'登录失败,错误信息: {result.get("message")}')
else:print(f'请求失败,状态码: {response.status_code}')
selenium实现登录功能
selenium 可以模拟真实的浏览器操作,当遇到验证码时,你可以手动输入验证码完成登录
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
import time# 配置 ChromeDriver 路径,需根据实际情况修改
chrome_driver_path = 'path/to/chromedriver'
service = Service(chrome_driver_path)# 创建 Chrome 浏览器实例
driver = webdriver.Chrome(service=service)# 打开豆瓣登录页面
login_url = 'https://accounts.douban.com/passport/login'
driver.get(login_url)# 等待页面加载
time.sleep(2)# 切换到密码登录方式
try:password_login_button = driver.find_element(By.XPATH, '//li[@class="account-tab-account"]')password_login_button.click()time.sleep(1)
except Exception as e:print(f"切换到密码登录失败: {e}")# 输入用户名和密码,需替换为你的真实信息
username = 'your_email_or_phone'
password = 'your_password'
try:username_input = driver.find_element(By.ID, 'username')password_input = driver.find_element(By.ID, 'password')username_input.send_keys(username)password_input.send_keys(password)time.sleep(1)
except Exception as e:print(f"输入用户名和密码失败: {e}")# 点击登录按钮
try:login_button = driver.find_element(By.XPATH, '//a[@class="btn btn-account btn-active"]')login_button.click()print("请手动处理可能出现的验证码,处理完成后按回车键继续...")input()time.sleep(5) # 等待登录完成print("登录操作已执行,可根据页面内容判断是否登录成功")
except Exception as e:print(f"点击登录按钮失败: {e}")# 可以在这里添加代码判断是否登录成功,例如检查特定元素是否存在
# 示例:检查是否出现个人主页的特定元素
try:driver.find_element(By.CSS_SELECTOR, 'a[href^="https://www.douban.com/people/"]')print("登录成功")
except Exception:print("登录失败")# 关闭浏览器
driver.quit()