Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能
利用Cookie可以实现免登陆
本次实验以:http://www.yinyuetai.com/ 音悦台为例
打开目标网站,点击登录
如何获取Cookie信息,方法有很多,可以利用浏览器手动登陆,在Network的Headers里面找到Request Headers,里面就有cookie信息,如下图
也可以利用抓包工具获取,这里就不多介绍,有兴趣可自行百度
Selenium也可以获取cookie信息,不过需要利用selenium登陆一次
利用Selenium登陆音悦台代码如下:
from selenium import webdriver
import json
import time
class LoginYinYueTai(object):
def __init__(self, url, phone_number, password):
self.url = url
self.phone_number = phone_number
self.password = password
self.browser = self.getbrowser()
self.run(self.browser)
def getbrowser(self):
chrome_options = webdriver.ChromeOptions()
# 把chrome设置成无界面模式,不论windows还是linux都可以,自动适配对应参数
chrome_options.add_argument('headless')
# 创建chrome无界面对象,设置成无头
browser = webdriver.Chrome(options=chrome_options,\
executable_path=r'D:\chromedriver_2.41\chromedriver.exe')
return browser
def run(self, browser):
# 打开目标网站
browser.get(self.url)
# 清楚之前的cookie信息
browser.delete_all_cookies()
# 等待js代码加载
browser.implicitly_wait(10)
# 找到登陆按钮,点击登录
browser.find_element_by_xpath("//div[@class='login fr']\
/a[@class='loginBtn J_login statisEle']").click()
# 选中弹出框
browser.current_window_handle
# 找到输入手机号的input标签,模拟输入手机号
browser.find_element_by_xpath(
"//form[@id='login-form']/div[@class='inter-content inter-content-login']\
//input[@class='login-text-long']").send_keys(self.phone_number)
# 找到输入密码的input标签,这里匹配上两个标签,所以用elements
Elements = browser.find_elements_by_xpath("//form[@id='login-form']/div\
/input[@class='login-text-long']")
# 找到符合条件的是第二个,模拟输入密码
Elements[1].send_keys(self.password)
# 找到登录按钮,并模拟点击登录
browser.find_element_by_xpath("//form[@id='login-form']//input[@class='login-submit']").click()
# 设置延迟加载网站内容
time.sleep(5)
try:
# 获取登陆成功后的cookie信息
login_rear_cookie = browser.get_cookies()
if login_rear_cookie:
# 把cookie信息用json序列化后写入cookie.txt文件
with open('cookie.txt', 'w') as f:
f.write(json.dumps(login_rear_cookie))
print('获取cookie信息成功')
except Exception as e:
print('获取cookie失败:{}'.format(e))
finally:
# 关闭Chrome浏览器
browser.quit()
if __name__ == '__main__':
url = 'http://www.yinyuetai.com/'
phone_number = '手机号'
password = '密码'
st = LoginYinYueTai(phone_number=phone_number, password=password, url=url)
运行程序,会生成一个cookie.txt文件, pycharm截图如下,
cookie.txt文件里面存放的是cookie信息,如下:
有了这个cookie.txt文件,就不需要每次都登陆了,下次使用selenium登陆的时候,带上cookie信息,就直接是登陆成功状态
Selenium添加cookie,实现免登陆
代码如下:
from selenium import webdriver
import json
import time
chrome_options = webdriver.ChromeOptions()
browser = webdriver.Chrome(options=chrome_options,
executable_path=r'D:\chromedriver_2.41\chromedriver.exe')
# 读取登陆后的cookie.txt文件
with open('cookie.txt', 'r', encoding='utf8') as f:
login_rear_cookie_list = json.loads(f.read())
# 清除cookie
browser.delete_all_cookies()
# 打开目标网站
browser.get('http://www.yinyuetai.com')
# 添加cookie
for cookie in login_rear_cookie_list:
browser.add_cookie(cookie)
time.sleep(5)
# 刷新页面 可以看到已登陆状态,已经成功登陆
browser.refresh()
time.sleep(10)
browser.quit()
运行代码,可以看到用户已登陆成功