发布时间:2018-08-20 20:53:15编辑:Run阅读(9824)
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()
运行代码,可以看到用户已登陆成功
下一篇: Selenium模拟登陆百度(带验证码)
47745
46235
37110
34627
29229
25886
24745
19863
19417
17908
5716°
6315°
5835°
5888°
6984°
5829°
5846°
6361°
6316°
7673°