Python3+selenium实现cookie免密登录的示例代码


Posted in Python onMarch 18, 2020

进过两天的研究终于实现了cookie的免密登录,其实就是session。特别开心,因为在Python爬虫群里问那些大佬,可是他们的回答令我寒心,自己琢磨!!!

靠谁比如靠自己,为此我总结下经验,以免入门的小白再次踩这样的吭。其实网上很多博客写的都比较不详细甚

首先问题自己思考,不懂得去群里问问,然后最重要的要理解事物的本质,只有理解后才能运用它;最后在百度一下把所有相关的博客都点开,一条一条的看一遍总结下规律,比较喽的就舍弃,这样基本上都能得到启发作用。比如selenium的本质就是操作浏览器的,那么操作cookie也是操作浏览器的,并且用selenium打开浏览器时什么都没有,如果进入某个网站就会生成cookie先关信息。等待,那么我们可以用selenium打开网站之后让他清除所有cookie避免干扰,然后睡眠20秒以便等我们登陆,这是就会产生cookie,我们将它获取下来就可以实现登陆了。

下面直接上代码:

# 登录
def login_jd():
  # 登录前清除所有cookie
  browser.get('https://www.baidu.com/')
  browser.delete_all_cookies()
 
  # 打印登录前的cookie
  cookieBefore = browser.get_cookies()
  print(cookieBefore)
 
  print("------------------------------------------------------------------------")
  time.sleep(2)
  list_cookies = [
    {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '1420_21120_29074_29237_2518_2909_29134_2832_28585_26350_2913'},
    {'domain': '.baidu.com', 'expiry': 159184274.325927, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': 'FF789623EA1785FF0D55ED0401D057B2:FG=1'},
    {'domain': 'www.baidu.com', 'expiry': 1563289, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '123143'},
    {'domain': '.baidu.com', 'expiry': 1560354688.892916, 'httpOnly': False, 'name': 'BDORZ', 'path': '/', 'secure': False, 'value': 'B490B5BF6F3CD40255D22BCDA1598'},
    {'domain': '.baidu.com', 'expiry': 1819468287.471656, 'httpOnly': True, 'name': 'BDUSS', 'path': '/', 'secure': False, 'value': 'tGem1JzblNpOa1VVek0yLThmbWR6RxENWZtcVNwUThpT2hCLTVsUFBQUFBJCQAAAAAAAAAAAEAAAA4MdBAd3d3d2dnZ2dnZWVlZWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALkI~1y5CP9cVm'},
    {'domain': '.baidu.com', 'expiry': 2569420288, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '587A2695FCD6D043A5FE5139E4F'},
    {'domain': '.baidu.com', 'expiry': 3707755.819949, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '156027786'},
    {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'}
  ]
 
  # 获取之后的cookie
  cookies = browser.get_cookies()
  print(browser.get_cookies())
 
  # 将获取的的所有cookies添加到浏览器
  for cookie in list_cookies:
    browser.add_cookie(cookie)
    print(cookie)
  time.sleep(2)
  # 刷新页面即可更新cookie
  browser.refresh()
  time.sleep(505)
  browser.quit()

Python3+selenium实现cookie免密登录的示例代码

Python3+selenium实现cookie免密登录的示例代码

示例二:

首先使用用户名和账号,登录获取cookie

import json
import time
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
 
 
class Crawler():
  def gather():
    chrome_options = Options()
    chrome_options.add_argument("window-size=1024,768")
    driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='C:\devtool\Anaconda\Scripts\chromedriver')
    wait = WebDriverWait(driver, 1)
    ##登录百度知道
    logurl = 'https://zhidao.baidu.com/'
    #登录前清楚所有cookie
    driver.delete_all_cookies()
    driver.get(logurl)
    ##登录前打印cookie
    print(driver.get_cookies())
 
    ##点击登录按钮
    driver.find_element_by_xpath('//*[@id="userbar-login"]').click()
    # driver.find_element_by_id("userbar-login").click()
    time.sleep(2)
    ##首次尝试的 默认进入扫码登录的界面
    try:
      footerULoginBtn = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__footerULoginBtn"]')
      footerULoginBtn.click() #切换到用户名和密码登录
      footerULoginBtn_not_exist = False
    except:
      footerULoginBtn_not_exist = True
 
    ## 用户名跟密码的设置并点击提交
    user = driver.find_element_by_name('userName')
    user.clear()
    pwd = driver.find_element_by_name('password')
    pwd.clear()
    submit = driver.find_element_by_id('TANGRAM__PSP_10__submit')
    time.sleep(2)
    user.send_keys('用户名')
    pwd.send_keys('密码')
    time.sleep(1)
    submit.click()
    time.sleep(1)
    ## 发送手机验证码 验证
    ##点击发送按钮
    ###是否需要输入手机验证码
    try:
      driver.find_element_by_xpath('//*[@id="TANGRAM__28__button_send_mobile"]').click()
      time.sleep(10)
      ##使用shell交互式,接受验证码
      message = input("Tell me the captcha: ")
      ##输入验证码
      captcha = driver.find_element_by_xpath('//*[@id="TANGRAM__28__input_label_vcode"]')
      time.sleep(1)
      captcha.send_keys(message)
      time.sleep(1)
      ##点击提交
      driver.find_element_by_xpath('//*[@id="TANGRAM__28__button_submit"]').click()
      time.sleep(3)
    except:
      time.sleep(1)
 
    ### 获取cookie
    cookie = driver.get_cookies()
    print(cookie)
    jsonCookies = json.dumps(cookie)
    with open('vcyber.json', 'w') as f:
      f.write(jsonCookies)
 
    time.sleep(30)
 
Crawler.gather()

获取cookie后,可以不用输入密码登录

import json
import time
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
 
 
class Crawler():
  def gather():
    chrome_options = Options()
 
    chrome_options.add_argument("window-size=1024,768")
    driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='C:\devtool\Anaconda\Scripts\chromedriver')
    wait = WebDriverWait(driver, 1)
 
    ##登录百度知道
    logurl = 'https://zhidao.baidu.com/'
 
    #登录前清楚所有cookie
    driver.delete_all_cookies()
    driver.get(logurl)
 
    f1 = open('vcyber.json')
    cookie = f1.read()
    cookie = json.loads(cookie)
    for c in cookie:
      driver.add_cookie(c)
    # # 刷新页面
    driver.refresh()
 
Crawler.gather()

到此这篇关于Python3+selenium实现cookie免密登录的示例代码的文章就介绍到这了,更多相关selenium cookie免密登录内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
Python使用jsonpath-rw模块处理Json对象操作示例
Jul 31 Python
Python中字符串与编码示例代码
May 20 Python
python调试神器PySnooper的使用
Jul 03 Python
python tkinter图形界面代码统计工具
Sep 18 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
使用Tensorflow将自己的数据分割成batch训练实例
Jan 20 Python
Python object类中的特殊方法代码讲解
Mar 06 Python
Keras实现支持masking的Flatten层代码
Jun 16 Python
在Python中实现字典反转案例
Dec 05 Python
详解解Django 多对多表关系的三种创建方式
Aug 23 Python
Selenium启动Chrome时配置选项详解
Mar 18 #Python
python+selenium+Chrome options参数的使用
Mar 18 #Python
selenium WebDriverWait类等待机制的实现
Mar 18 #Python
Python socket处理client连接过程解析
Mar 18 #Python
python selenium自动化测试框架搭建的方法步骤
Jun 14 #Python
Python如何使用paramiko模块连接linux
Mar 18 #Python
Python selenium页面加载慢超时的解决方案
Mar 18 #Python
You might like
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
jQuery 使用手册(四)
2009/09/23 Javascript
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
2019/09/02 Javascript
vue实现购物车列表
2020/06/30 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
python在非root权限下的安装方法
2018/01/23 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
软件测试常见笔试题
2012/02/04 面试题
应届大学生求职的自我评价
2013/11/17 职场文书
西安事变观后感
2015/06/12 职场文书
班级联欢会主持词
2015/07/03 职场文书
2016年校园重阳节广播稿
2015/12/18 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫