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 相关文章推荐
Python3使用requests发闪存的方法
May 11 Python
python僵尸进程产生的原因
Jul 21 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
Python开发最牛逼的IDE——pycharm
Aug 01 Python
python打开windows应用程序的实例
Jun 28 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
基于Python的Jenkins的二次开发操作
May 12 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
PyCharm Community安装与配置的详细教程
Nov 24 Python
python中if嵌套命令实例讲解
Feb 25 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
Mar 03 Python
Python实现排序方法常见的四种
Jul 15 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
escape unescape的php下的实现方法
2007/04/27 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
php实现文本数据导入SQL SERVER
2015/05/17 PHP
PHP编写daemon process 实例详解
2016/11/13 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
2014/01/25 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
vue 页面加载进度条组件实例
2018/02/05 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
Vue 2.0 中依赖注入 provide/inject组合实战
2019/06/20 Javascript
python爬取网站数据保存使用的方法
2013/11/20 Python
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
python里运用私有属性和方法总结
2019/07/08 Python
python绘制彩虹图
2019/12/16 Python
python重要函数eval多种用法解析
2020/01/14 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
柯基袜:Corgi Socks
2017/01/26 全球购物
alice McCALL官网:澳大利亚时尚品牌
2020/11/16 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
企业职业病防治方案
2014/05/29 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
2014年德育工作总结
2014/11/20 职场文书