Selenium利用cookie免登陆音悦台

2020-01-07 16:18:19 浏览数 (1)

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.41chromedriver.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.41chromedriver.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()

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

0 人点赞