六 Selenium中免密登录和cookie操作

一 Selenium中免密登录实例(使用简书示例)

谷歌查看token

 

 

from django.test import TestCase

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# Create your tests here.
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select


import time
options = webdriver.ChromeOptions()
#屏蔽“Chrome正受到自动测试软件的控制”提示信息
options.add_experimental_option("excludeSwitches", ['enable-automation'])
driver = webdriver.Chrome(chrome_options=options)

driver.get("https://www.jianshu.com/u/d63796bf7581")
sign_in = driver.find_element_by_css_selector("[href='/sign_in']")
sign_in.click()
username = driver.find_element_by_css_selector("input[placeholder = '手机号或邮箱']")
username.send_keys('18236932541')
password = driver.find_element_by_css_selector("input[placeholder='密码']")
password.send_keys('a414630491')

submit = driver.find_element_by_css_selector("button[type='button']")
submit.click()
#此时进行手动操作

time.sleep(10)

#cookie 关键字
key = 'remember_user_token'
user_token = driver.get_cookie(key)
print(user_token)
cookies = driver.get_cookies()
print(cookies)
driver.quit()

cookie = {'name':key,'value':user_token['value']}
driver = webdriver.Chrome()
driver.get("https://www.jianshu.com/u/d63796bf7581")
driver.add_cookie(cookie)

driver.get("https://www.jianshu.com/u/d63796bf7581")
time.sleep(3)
driver.close()
简书免密登录示例

二 Cookie详细介绍及使用fiddler抓包

  Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器.

     Cookie操作的几个方法:

      ①get_cookies(): 获取所有的cookies
      ②get_cookie(name):获取指定 name 的 cookie
      ③delete_cookie(name):清除指定的cookie
      ④delete_all_cookies():清除所有的cookie
      ⑤add_cookie(cookie_dict):添加 cookie 的值

     Cookie的组成部分:

      cookie ={u'domain': u'.cnblogs.com',
                     u'name': u'.CNBlogsCookie',
                     u'value': u'xxxx',
                     u'expiry': 1491887887,
                     u'path': u'/',
                     u'httpOnly': True,
                     u'secure': False}
      domain:服务器域名;
      name:cookie的名称;
      value:cookie对应的值,动态生成的;
      expiry:cookie有效终止日期;
      path:Path 属性定义了 Web 服务器上哪些路径下的页面可获取服务器设置的Cookie;
      httpOnly:防脚本攻击;
      secure:在 Cookie 中标记该变量,表明只有当浏览器和 Web Server 之间的通信协议为加密认证协议时浏览器才向服务器提交相应的 Cookie。当前这种协议只有一种,即为 HTTPS。

实例:通过cookie绕过验证码

            注意:
              (1)登录时候要勾选下次自动登录按钮.
                (2)   add_cookie()只添加 name 和 value,对于博客园的登录是不成功.
                (3)本方法并不适合所有的网站,一般像博客园这种记住登录状态的才会适合
   ①先通过Fiddler抓包(先配置能够抓取到https)

 

 ②添加Cookie

from selenium import webdriver
import time
options = webdriver.ChromeOptions()
options.add_argument('disable-infobars')
driver =webdriver.Chrome(options=options)
#启动浏览器后获取cookies
print(driver.get_cookies())
driver.get('https://www.cnblogs.com/rwwh')
#添加Cookie
c1 ={u'domain':u'.cnblogs.com',
      u'name':u'.CNBlogsCookie',
      u'value':u'73431BB1759A9C32AD6F5DECDED7CCA554CE1F0CD608BA0F03F636B73E84D48F64C6A6B87FCD443A7B93A9E'
               u'54EF35909FCE008D7ED1E93973A8DB9A04099770FD08907F9925733DC1D1831417C041D5253E85E85',
      u'expiry':1550512158,
      u'path':u'/',
      u'httpOnly':True,
      u'secure':False
       }
c2 ={u'domain':u'.cnblogs.com',
      u'name':u'..Cnblogs.AspNetCore.Cookies',
      u'value':u'CfDJ8KlpyPucjmhMuZTmH8oiYTMkcOEWKC0SA9hxlK5ZXpTk5AaUpWxwNIvCv7K9MBeZNqEdJGj5gAqSui3'
               u'qgzCGWPjDlMH2-06_wWB-H2PGGnwxevMO-Utl_UYJDJnO2hivO_wzHJfHumKSPhwE96BNRA5CPK9MWdVCN6vzuC_PZXvwmEC3R_mPW'
               u'5brBWclVWNTm73tJUCvGhDkgCZgo3EpR6lBDVVsORV0G7Lz9Yo06j_o53IieZDjQq26JGKNwW19KuxQd--_K76zt34nHXft-NmL0t1SyyIB89n_eDjrF4ti5UzsFAf84TITQHei8-kPow',
      u'expiry':1550512158,
      u'path':u'/',
      u'httpOnly':True,
      u'secure':False
       }
driver.add_cookie(c1)
driver.add_cookie(c2)
time.sleep(3)
driver.refresh()
driver.find_element_by_id('blog_nav_newpost').click()
添加cookie

 

posted on 2020-03-22 10:18  rwwh  阅读(399)  评论(0)    收藏  举报

导航