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异常学习笔记
Feb 03 Python
Python调用命令行进度条的方法
May 05 Python
Django的session中对于用户验证的支持
Jul 23 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
Jun 22 Python
Python DataFrame.groupby()聚合函数,分组级运算
Sep 18 Python
python实现字符串和字典的转换
Sep 29 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
Aug 13 Python
Django之使用内置函数和celery发邮件的方法示例
Sep 16 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
Python实现Wordcloud生成词云图的示例
Mar 30 Python
python批量创建变量并赋值操作
Jun 03 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
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
2007/03/15 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
使用Composer安装Yii框架的方法
2016/03/15 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
使用Python的判断语句模拟三目运算
2015/04/24 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
长青弘远的面试题
2012/06/09 面试题
团日活动策划书
2014/02/01 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
百日安全生产活动总结
2014/07/05 职场文书
2014年电工工作总结
2014/11/20 职场文书
2016猴年春节问候语
2015/11/11 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers