selenium3.7+ python3 添加cookie模拟登陆

小说:日赚500元挂机软件作者:安帝海更新时间:2018-11-21字数:26403

她可不愿意看他们两人中任何一个人死去,他们任何一个人死去,她都会伤心欲绝的。

日赚几百

“两个月前朝廷发来牒文,将迁内地三万军户至安西,我想能不能将他们直接迁来碎叶,这样对碎叶的发展将有着不可估量的作用。”
“传闻之中先天至宝混沌钟是具备拥有镇压混沌之威、颠倒时空之力、炼化阴阳之功、扭转乾坤之能,甚至能可开天辟地,镇压鸿蒙气运,演天道运转,现在刘皓的圣人灵宝虽然威能没到这个地步,但是混沌钟有的能力,圣人灵宝混沌钟也有了。”布玛感叹说道:

两株仙草不分先后的落在唐三面前的地面上。说也奇怪,之前还是极寒极热的他们,在聚首在唐三面前时,寒热两种气息却同时消失了。

selenium3.7+ python3 添加cookie模拟登陆


 

一、背景介绍

最近做一个爬虫项目,用selenium调用浏览器去获取渲染后的源码,但是每次登陆都需要手机验证,这真的是头痛啊,这种验证方式不要想着去破解,还是老老实实用手机收验证码去吧!反正我是不知道这种验证方式还能破解!难道就没有其他办法了吗?

有,那就是模拟登陆!这样最起码不用没测试一次就登陆验证一次。

这里要说一下的就是,网上很多关于webdriver 添加cookie的教程,基本百分之80都是有问题的。反正我是找了N多的帖子都没有一个是正确的。

 

二、  添加cookie方法:driver.add_cookie()

1.add_cookie(cookie_dict)方法里面参数是cookie_dict,说明里面参数是字典类型。

2.add_cookie源码。

从源码中我们可以看出,add_cookie方法接受一个字典,字典中包含name,value,path,domain,secure,expiry,但是这个源码容易误导人,那就是cookie参数没有给全。

网上很多教程给的代码cookie参数是没给够的,根本就跑不起来。

 

3. add_cookie接收的字典格式。 

正确的格式:

cookie = {
# "domain": ".58.com", #Firefox浏览器不能写domain,如果写了会报错,谷歌需要写否则也是报错,这里就是一个坑。其他浏览器没测试不知道情况。
    "name": name,
"value": value,
"expires": "",
"path": "/",
"httpOnly": False,
"HostOnly": False,
"Secure": False,

}

name:cookie的名称

value:cookie对应的值,动态生成的

domain:服务器域名

expiry:Cookie有效终止日期

path:Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的Cookie

httpOnly:防脚本攻击

secure:在Cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时




为什么要构造成这样子,其实我们看下浏览器保存的cookie格式就明白了。下图就是谷歌浏览器的cookie 的截图。

 

三 ,我们举个例子看下是否真的写成功了:

 

 第一次访问的的时候去获取名字叫hello的cookie 是没有的,add_cookie后再去访问,第二次访问就拿到了hello。说明已经写进去了。

 

 四、项目实战。

  能不能用?好不好用?怎么用?,用项目来说话,模拟登陆百度。!

目标:

  1.手动登录一次后,只要在cookie 有效期内无需重复登录。

  2.访问浏览记录。

#!coding=utf-8
import time
from selenium import webdriver
import pickle

class BaiduSpider(object):
    def __init__(self,username,password):
        self.username = username
        self.password = password
        self.driver = webdriver.Chrome()
        self.driver.get(url="http://www.baidu.com")
        self.set_cookie()
        self.is_login()
    def is_login(self):
        """判断当前是否登陆"""
        self.driver.refresh()
        html = self.driver.page_source
        if html.find(self.username) == -1: #利用用户名判断是否登陆
            # 没登录 ,则手动登录
            self.login()
        else:
            #已经登录  尝试访问搜索记录,可以正常访问
            self.driver.get(url="http://i.baidu.com/my/history")
            time.sleep(30)  # 延时看效果

    def login(self):
        """登陆"""
        time.sleep(60) #等待手动登录
        self.driver.refresh()
        self.save_cookie()

    def save_cookie(self):
        """保存cookie"""
        # 将cookie序列化保存下来
        pickle.dump(self.driver.get_cookies(), open("cookies.pkl", "wb"))

    def set_cookie(self):
        """往浏览器添加cookie"""
        """利用pickle序列化后的cookie"""
        try:
            cookies = pickle.load(open("cookies.pkl", "rb"))
            for cookie in cookies:
                cookie_dict = {
                    "domain": ".baidu.com",  # 火狐浏览器不用填写,谷歌要需要
                    "name": cookie.get("name"),
                    "value": cookie.get("value"),
                    "expires": "",
                    "path": "/",
                    "httpOnly": False,
                    "HostOnly": False,
                    "Secure": False}
                self.driver.add_cookie(cookie_dict)
        except Exception as e:
            print(e)


if __name__ == "__main__":

    BaiduSpider("usename","!!!!") # 你的百度账号,密码

  

 

当前文章:http://zxqss.com/html_70564.html

发布时间:2018-11-21 06:13:24

一年要赚到多少钱才能算不错 网络平台赚钱 正规网看电影赚钱软件 找在家工作工资日结 宝能投资 淘宝兼职qq群 兼职台 可以在家兼职的工作学生

编辑:海华密

我要说两句: (0人参与)

发布