添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

模拟登录WB是实现WB网页爬虫的第一步,现在的WB网页版有个sina visit system,只有登录过后才能获取更多内容。本文使用selenium通过预登陆保存cookie到本地,之后重复登录只需要提取本地cookie即可免去每次扫码或者输密码登录。

一、预登陆获取cookie

1) cookie处理

先简单引入两个函数实现保存cookies及读取cookies:

import os
import json
class CookieLogin:
    def __init__(self,f_path):
        对象初始化
        :param url: 首页地址
        :param f_path: Cookies文件保存路径
        # self.url = url
        self.f_path = f_path
        # self.browser = self.start_browser(executable_path)
    def save_cookies(self, data, encoding="utf-8"):
        Cookies保存方法
        :param data: 所保存数据
        :param encoding: 文件编码,默认utf-8
        with open(self.f_path, "w", encoding=encoding) as f_w:
            json.dump(data, f_w)
        print("save done!")
    def load_cookies(self, encoding="utf-8"):
        Cookies读取方法
        :param encoding: 文件编码,默认utf-8
        if os.path.isfile(self.f_path):
            with open(self.f_path, "r", encoding=encoding) as f_r:
                user_cookies = json.load(f_r)
            return user_cookies

2) 预登陆

用selenium模拟登录,人工扫描二维码转到登录页面后,使用**wd.get_cookies()**保存cookies

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from time import sleep
from untitled.py爬虫项目.cookies_usage import CookieLogin
prefs = {
    'profile.default_content_setting_values': {
        'notifications': 2  # 隐藏chromedriver的通知
    'credentials_enable_service': False,  # 隐藏chromedriver自带的保存密码功能
    'profile.password_manager_enabled': False  # 隐藏chromedriver自带的保存密码功能
# 创建一个配置对象
options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', prefs)
options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 设置为开发者模式,禁用chrome正受到自动化检测的显示
options.add_argument('--disable-gpu')  # 谷歌文档提到需要加上这个属性来规避bug
wd = webdriver.Chrome(service=Service(r'D:\Study\chromedriver.exe'), options=options)
# 最大化窗口
wd.maximize_window()
wd.implicitly_wait(5)
url = "https://weibo.com/"
wd.get(url=url)
# 现主页实现登录,用二维码扫就行
wd.find_element(By.XPATH, '//*[@id="__sidebar"]/div/div[1]/div[1]/div/button').click()
sleep(10)
# 保存cookie到本地
cookies = wd.get_cookies()
cookie_fname = 'cookie.json'
login = CookieLogin(cookie_fname)
login.save_cookies(cookies)
wd.close()
wd.quit()

二、登录测试

在这段测试中注意打开网页后一定要多给点睡眠时间,至少4s以上,保证能删除完没有登录时页面的cookies,再重新写入本地保存的登录后cookies。

url = "https://weibo.com/"
wd.get(url=url)
# cooikes = wd.get_cookies()
# for cooike in cooikes:
#     print(cooike)
sleep(4)
wd.delete_all_cookies()
# 持久化登录,之后登录就不需要上面的扫二维码
login = CookieLogin("cookie.json")
cookies = login.load_cookies()
try:
    for cookie in cookies:
        cookie_dict = {
            'domain': '.weibo.com',
            'name': cookie.get('name'),
            'value': cookie.get('value'),
            "expires": '',
            'path': '/',
            'httpOnly': False,
            'HostOnly': False,
            'Secure': False
        print(cookie_dict)
        wd.add_cookie(cookie_dict)
except Exception as e:
    print(e)
sleep(5)
wd.refresh()
# cooikes2 = wd.get_cookies()
# for cooike in cooikes2:
#     print(cooike)
sleep(5)
# wd.get(url)
url = "https://s.weibo.com/weibo?q=%E6%96%B0%E5%86%A0%E7%96%AB%E6%83%85"
wd.get(url)
sleep(2)
# cooikes3 = wd.get_cookies()
# for cooike in cooikes2:
#     print(cooike)
wd.close()
wd.quit()

参考博客:

Python Selenium.WebDriver 对Cookies的处理及应用『模拟登录』

模拟登录微博是实现微博网页爬虫的第一步,现在的微博网页版有个sina visit system,只有登录过后才能获取更多微博内容。本文使用selenium通过预登陆保存cookie到本地,之后重复登录只需要提取本地cookie即可免去每次扫码或者输密码登录。............
在以前的文章中实现了向服务器发送POST请求模拟登录的操作【发送post请求】,但遇到验证码等情况时该方法就没用了。但我们可以使用当前登录账号的cookie信息,以实现下次访问该网站时自动登录。 可以利用抓包或F12,在Network页面中找到当前登录cookies信息,但这个方法获取cookies值不一定可以直接使用。在这里学习中提供了两种自动获取cookies并使用cookies状态实现登录的方法。 使用Session对象获取cookies 使用request模块中的Session对象..
由于HTTP协议是无状态协议,所以服务器与客户端通过http协议通讯时,服务器不能记录客户端的信息。 为了解决这个问题,通过 Cookie 和 Session 技术来实现Cookie保存在客户端中 Session保存在服务器中 cookie的属性 一般cookie所具有的属性,包括: Domain:域,表示当前cookie所属于哪个域或子域下面。 对于服务器返回的Set-Cookie中,如果没有指定Domain的值,那么其Domain的值是默认为当前所提交的http的请求所对应的主域名的。比如访问 http://www.example.com,返回一个cookie,没有指名dom
进过两天的研究终于实现cookie的免密登录,其实就是session。特别开心,因为在Python爬虫群里问那些大佬,可是他们的回答令我寒心,自己琢磨!!! 靠谁比如靠自己,为此我总结下经验,以免入门的小白再次踩这样的吭。其实网上很多博客写的都比较不详细甚 首先问题自己思考,不懂得去群里问问,然后最重要的要理解事物的本质,只有理解后才能运用它;最后在百度一下把所有相关的博客都点开,一条一条的看一遍总结下规律,比较喽的就舍弃,这样基本上都能得到启发作用。比如selenium的本质就是操作浏览器的,那么操作cookie也是操作浏览器的,并且用selenium打开浏览器时什么都没有,如果进入某个网
Selenium Python 提供了一个简单的API 便于我们使用 Selenium WebDriver编写 功能/验收测试。 通过Selenium Python的API,你可以直观地使用所有的 Selenium WebDriver 功能 。Selenium Python提供了一个很方便的接口来驱动 Selenium WebDriver , 例如Firefox、Chrome、Ie,以及Remote,目前支持的python版本有2.7或3.2以上. selenium 可以自动化测试、抢票、爬虫等工作。初次了解,现在模拟登录百度——即自动打开浏览器、自动输入账号密码并提交进行登录。 工作需要实
import pickle # cookie.pkl文件 pickle.dump(self.driver.get_cookies(), open('cookies.pkl', 'wb')) 下次访问就可以加载之前保存的cookie.pkl文件 #先访问网站 self.driver.get(target_url) #再加载cookie cookies = pickle.load(open('cookies.pkl', rb)) for co 1. 打开登录页面并输入账号密码,然后点击登录按钮。 2. 在登录成功后,使用Selenium的get_cookies()方法获取当前页面的cookie。 3. 将获取到的cookie保存到一个变量中。 4. 关闭当前页面,重新打开一个新的页面。 5. 使用Selenium的add_cookie()方法将保存的cookie添加到新页面中。 6. 刷新页面,即可实现免验证码登录。 需要注意的是,获取到的cookie需要在一定时间内有效,否则需要重新获取。另外,不同网站的cookie格式可能不同,需要根据实际情况进行处理。