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获取标准北京时间的方法
Mar 24 Python
Python生成数字图片代码分享
Oct 31 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
python 梯度法求解函数极值的实例
Jul 10 Python
django 自定义filter 判断if var in list的例子
Aug 20 Python
python入门之基础语法学习笔记
Feb 08 Python
Python多线程获取返回值代码实例
Feb 17 Python
Python实现初始化不同的变量类型为空值
Jun 02 Python
python性能测试工具locust的使用
Dec 28 Python
pycharm 的Structure界面设置操作
Feb 05 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中bind_param()函数用法分析
2017/03/28 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
js特效,页面下雪的小例子
2013/06/17 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
javaScript语法总结
2016/11/25 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
js 概率计算(简单版)
2017/09/12 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
python比较2个xml内容的方法
2015/05/11 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
python图形用户接口实例详解
2019/12/16 Python
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
一年级数学教学反思
2014/02/01 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
委托培训协议书
2014/11/17 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
党员承诺书范文2015
2015/04/27 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
Python实现滑雪小游戏
2021/09/25 Python