前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Selenium利用cookie免登陆音悦台

Selenium利用cookie免登陆音悦台

作者头像
py3study
发布2020-01-07 16:18:19
9450
发布2020-01-07 16:18:19
举报
文章被收录于专栏:python3

Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能

利用Cookie可以实现免登陆

本次实验以:http://www.yinyuetai.com/ 音悦台为例

打开目标网站,点击登录

如何获取Cookie信息,方法有很多,可以利用浏览器手动登陆,在Network的Headers里面找到Request Headers,里面就有cookie信息,如下图

也可以利用抓包工具获取,这里就不多介绍,有兴趣可自行百度

Selenium也可以获取cookie信息,不过需要利用selenium登陆一次

利用Selenium登陆音悦台代码如下:

代码语言:javascript
复制
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,实现免登陆

代码如下:

代码语言:javascript
复制
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()

运行代码,可以看到用户已登陆成功

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/08/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档