python模块selenium用cookies 实现快速登录
序言:今天在做12306快速登录的py,我一开始用selenium模拟浏览器密码登录,发现现在12306密码登录居然要短信验证码,我就想好麻烦,好慢。在查资料的过程中我就看见了cookies免密码登录。
目录
cookies 定义
cookie: 记录身份信息。当你登录一个网站,你都会在登录页面看到一个可勾选的选项“记住我”,如果你勾选了,以后你再打开这个网站就会自动登录,这就是cookie在起作用。
(1)当你登录微博账号123456,并勾选“记住我”。
(2)服务器就会生成一个cookies和123456这个账号绑定。
(3)接着服务器把这个cookies告诉你的浏览器,让浏览器把cookies存储到你的本地电脑。
(4)当下一次,浏览器带着cookies访问博客,服务器会知道你是123456,你不需要再重复输入 账号密码,即可直接访问。
总结:就是你第一次登录一个网站后,它会记住你的信息,下次你再访问就不用手动登录了。
cookies 保存
只用于参考,如果想用直接到综合案例——12306代码区复制
这个保存是12306为例,账号,密码和身份证后4位需要你们手动改一下。文章创建时间为2024年1月25日22:43:18,后面12306更新了的话可能不能直接套用。
还有手机验证码需要手动输入,有60秒输入时间。如果想改时间就只需要改代码中的60.
#导入selenium模块
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
import pickle
import time
#打开谷歌浏览器
driver = webdriver.Chrome()
#传入网站,打开网站
driver.get("https://kyfw.12306.cn/otn/resources/login.html")
#定位扫码登录,点击扫码登录
# driver.find_element_by_css_selector('#toolbar_Div > div.login-panel > div.login-box > ul > li.login-hd-account > a').click()
#密码登录
driver.find_element_by_css_selector('#J-userName').send_keys('账号')
driver.find_element_by_css_selector('#J-password').send_keys('密码')
driver.find_element_by_css_selector('#J-login').click()
driver.implicitly_wait(10)
driver.find_element_by_id('id_card').send_keys('身份证后四位')
driver.find_element_by_id('verification_code').click()
time.sleep(60)
driver.find_element_by_id('sureClick').click()
WebDriverWait(driver,10,1).until(EC.url_to_be('https://kyfw.12306.cn/otn/view/index.html'))
pickle.dump(driver.get_cookies(), open('./12306cookies.pkl', 'wb'))
print('cookies保存成功')
cookies 使用
cookies = pickle.load(open('./12306cookies.pkl', 'rb'))
for cookie in cookies:
cookie_dic = {
'domain': '.12306.cn',
'name': cookie.get('name'),
'value': cookie.get('value')
}
driver.add_cookie(cookie_dic)
driver.get('https://kyfw.12306.cn/otn/leftTicket/init')
print('cookies载入成功')
综合案例——12306
首先我们登录一次用于保存cookies,
我做了一个if验证,如果你是第一次登录没有12306cookies.pkl文件,就会进入保存cookies。如果你有12306cookies.pkl 它就会直接免密码登录。
# 导入selenium模块
import os
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
import pickle
import time
# 打开谷歌浏览器
driver = webdriver.Chrome()
# 传入网站,打开网站
driver.get("https://kyfw.12306.cn/otn/resources/login.html")
# 定位扫码登录,点击扫码登录
# driver.find_element_by_css_selector('#toolbar_Div > div.login-panel > div.login-box > ul > li.login-hd-account > a').click()
# 密码登录
if not os.path.exists('./12306cookies.pkl'):
driver.find_element_by_css_selector('#J-userName').send_keys('账号')
driver.find_element_by_css_selector('#J-password').send_keys('密码')
driver.find_element_by_css_selector('#J-login').click()
driver.implicitly_wait(10)
driver.find_element_by_id('id_card').send_keys('身份证后四位')
driver.find_element_by_id('verification_code').click()
time.sleep(60)
driver.find_element_by_id('sureClick').click()
WebDriverWait(driver, 10, 1).until(EC.url_to_be('https://kyfw.12306.cn/otn/view/index.html'))
pickle.dump(driver.get_cookies(), open('./12306cookies.pkl', 'wb'))
print('cookies保存成功')
else:
cookies = pickle.load(open('./12306cookies.pkl', 'rb'))
for cookie in cookies:
cookie_dic = {
'domain': '.12306.cn',
'name': cookie.get('name'),
'value': cookie.get('value')
}
driver.add_cookie(cookie_dic)
driver.get('https://kyfw.12306.cn/otn/leftTicket/init')
print('cookies载入成功') # 利用cookie实现快速登陆