Python自学第二周→微博自动点赞Helium cookie绕过登录

Cookie

前言

Selenium库里的webdriver启动浏览器是不会把浏览器本身的Cookie带出来的,这是为了隔离本身的浏览器配置,每次运行chromadriver浏览器都保证干净的环境,让你能更好地开发测试框架。。。
由于微博点赞代码雏形已写好,频繁的登陆测试导致账号被限制登陆,浪费了时间还影响了修复Bug,只能想办法绕过登记机制直接登陆。

如何实现

网上搜了一圈大概还是通过Cookies绕过登陆机制。

  • 办法有两种:

    1. 抓取Cookie并绕过登录
    2. 下载Chrome配置加载

第一种、比较复杂先Mark低再研究→使用selenium库编写(又长又臭)以大麦网为例:

1.1 脚本一 获取cookies并保存本地

from selenium import webdriver
import os
import time
import json
 
def browser_initial():
    """"
    进行浏览器初始化
    """
    os.chdir('E:\\pythonwork')
    browser = webdriver.Chrome()
    log_url = 'https://passport.damai.cn/login?ru=https%3A%2F%2Fwww.damai.cn%2F'
    return log_url,browser
 
def get_cookies(log_url,browser):
    """
    获取cookies保存至本地
    """
    browser.get(log_url)
    time.sleep(15)     # 进行扫码
    dictCookies = browser.get_cookies()    # 获取list的cookies
    jsonCookies = json.dumps(dictCookies) #  转换成字符串保存
    
    with open('damai_cookies.txt', 'w') as f:
        f.write(jsonCookies)
    print('cookies保存成功!')
 
if __name__ == "__main__":
    tur = browser_initial()
    get_cookies(tur[0], tur[1])

手动登录一次

代码运行时会出现二维码,扫码后登录成功,程序自动保存cookies至本地。

python反馈

1.2 脚本二 加载本地的cookies访问网页

from selenium import webdriver
import os
import json
 
def browser_initial():
    """"
    浏览器初始化,并打开大麦网购票界面(未登录状态)
    """
    os.chdir('E:\\pythonwork')
    browser = webdriver.Chrome()
    browser.get('https://detail.damai.cn/item.htm?spm=a2oeg.search_category.0.0.8778f91as7xLdc&id=610870234751&clicktitle=2020%E5%BC%A0%E6%9D%B0%E3%80%8C%E6%9C%AA%C2%B7LIVE%E3%80%8D%E5%B7%A1%E5%9B%9E%E6%BC%94%E5%94%B1%E4%BC%9A%20%E5%90%88%E8%82%A5%E7%AB%99')
    return browser
 
def log_damai(browser):
    """
    从本地读取cookies并刷新页面,成为已登录状态
    """
    with open('damai_cookies.txt', 'r', encoding='utf8') as f:
        listCookies = json.loads(f.read())
 
    # 往browser里添加cookies
    for cookie in listCookies:
        cookie_dict = {
            'domain': '.damai.cn',
            'name': cookie.get('name'),
            'value': cookie.get('value'),
            "expires": '',
            'path': '/',
            'httpOnly': False,
            'HostOnly': False,
            'Secure': False
        }
        browser.add_cookie(cookie_dict)
    browser.refresh()                      # 刷新网页,cookies才成功
    
if __name__ == "__main__":
    browser = browser_initial()
    log_damai(browser)

结果如下图,出现的界面显示未登录,稍等几秒浏览器读取cookies后显示登录状态。

未登录

已登录

以上代码最难的部分就是往浏览器里面添加cookies的地方,我们怎么知道要改哪些参数并设置呢?原来获取下来的cookies是以列表的形式储存的,而列表里的元素是字典,每一个字典都是一个cookies,所以我们需要遍历列表,以字典形式往浏览器添加。我遍历了一遍本地保存的cookies,如下图。

请输入图片描述


第二种、加载Chrome配置

# coding:utf-8
from selenium import webdriver
# 加载Chrome配置
option = webdriver.ChromeOptions()
#下载存储缓存的文件夹D:\test可以修改
option.add_argument(r'--user-data-dir=D:\test')
driver = webdriver.Chrome(chrome_options=option)
driver.implicitly_wait(30)
driver.get("https://www.imlam.com/")

只需9行代码实现,由于我是用Helium库(Selenium的封装代码-简化)写的代码,需要对上述代码进行转化,网上关于Helium的实例太少太少了,只能自己查阅资料理解着去修改--【下班再写】

此处内容需要评论回复或登录后方可阅读。

from selenium import webdriver
option = webdriver.ChromeOptions()

# 伪装iphone登录
# option.add_argument('--user-agent=iphone')

# 伪装android
option.add_argument('--user-agent=android')

driver = webdriver.Chrome(chrome_options=option)
driver.get('https://www.imlam.com/')

版权属于:Lam 所有,转载请注明文章来源。

本文链接: https://www.imlam.com/22.html

赞 (0)

评论区

评论一下~

字数
0
/300

暂无评论,要不来一发?

回到顶部