zoukankan      html  css  js  c++  java
  • python selenium2 有关cookie操作实例及如何绕开验证码

    1.先看一下cookie是啥

    cookie是访问web时服务器记录在用户本地的一系列用户信息(比如用户登录信息),以便对用户进行识别

    from selenium import webdriver
    import time
    
    base_url = "https://www.baidu.com"
    
    driver = webdriver.Firefox()
    driver.implicitly_wait(10)
    driver.get(base_url)
    
    #打印所有cookie
    print driver.get_cookies()

    得到如下打印

    列表中为所有cookie,不同的cookie在其中各字典中

    cookie_1 = {u'domain': u'.baidu.com',
    u'name': u'BDORZ',
    u'value': u'B490B5xxxxxxxxxxxxxxxxxDA1598',
    u'expiry': 1490346310,
    u'path': u'/',
    u'httpOnly': False,
    u'secure': False}

    name:cookie的名称

    value:cookie对应的值,动态生成的

    domain:服务器域名

    expiry:cookie有效终止日期

    path:Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的cookie

    httpOnly:防脚本攻击

    secure:在cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时(当前即https),浏览器才向服务器提交相应的cookie

    2.使用cookie绕开登录验证码

    登录百度时需要输入验证码,我们抓取登录前的cookie,和登录后的cookie,对比发生的变化

    首先打开fiddler抓包

    执行如下脚本,注意在输入验证码时脚本无法处理,所以加了等待,这时可以自己手动输入验证码,然后等待click

    #coding=utf-8
    from selenium import webdriver
    import time
    
    base_url = "https://www.baidu.com"
    usr_name = "xxoo"
    usr_pwd = "xxoo"
    
    driver = webdriver.Firefox()
    driver.implicitly_wait(10)
    
    #清除所有cookie
    driver.delete_all_cookies()
    driver.get(base_url)
    print driver.get_cookies()
    
    driver.find_element_by_link_text(u"登录").click()
    driver.find_element_by_css_selector("#TANGRAM__PSP_8__userName").send_keys(usr_name)
    driver.find_element_by_css_selector("#TANGRAM__PSP_8__password").send_keys(usr_pwd)
    time.sleep(10)
    #在这个等待的时间里去手动输入验证码

    driver.find_element_by_css_selector("#TANGRAM__PSP_8__submit").click() time.sleep(3) #打印登录后的cookie print driver.get_cookies()

    在打印中我们得到如下所有cookie

    在fiddler抓包中找到登录前后的包,其中有对应的cookie

    登录前

    登录后

    这里的cookie中只能体现name和value信息,cookie的完整格式在前面讲到

    对比前后cookie可以看到登录后多了BDORZ和BDUSS信息

    那么我们在前面脚本打印的cookie中提出对应的这两组cookie,写入新的脚本中

    执行新的脚本发现,不在需要输入用户名密码和验证码了,刷新后就会进入登录状态

    #coding=utf-8
    from selenium import webdriver
    import time
    
    base_url = "https://www.baidu.com"
    driver = webdriver.Firefox()
    driver.implicitly_wait(10)
    
    #清除所有cookie
    driver.delete_all_cookies()
    driver.get(base_url)
    
    cookie_1 = {u'domain': u'.baidu.com',
                u'name': u'BDORZ',
                u'value': u'B490B5EBXXXXXXXXXXXXXDA1598',
                u'expiry': 1490346310,
                u'path': u'/',
                u'httpOnly': False,
                u'secure': False}
    
    cookie_2 = {u'domain': u'.baidu.com',
                u'name': u'BDUSS',
                u'value': u'o0Z29lNFRPOE85TXXXXXXXXXXXXXXXXXXXXXXXXXXXQnk2Rno3dmFIUHRZSVFBQUFBJCQAAAAAAAAAAAEAAAC8yRwCXXXXd2VlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANqP01jaj9NYak',
                u'expiry': 1749459934,
                u'path': u'/',
                u'httpOnly': True,
                u'secure': False}
    
    #添加cookie
    driver.add_cookie(cookie_1)
    driver.add_cookie(cookie_2)
    time.sleep(2)
    driver.refresh()

    #水平拙劣,不妥之处请指正

  • 相关阅读:
    mhWaveEdit 1.4.8
    FFmpeg — 屏幕录制器材
    GNOME 主题: Troll
    cGmail — 主动反省邮件
    最小化布置 Ubuntu
    GNOME Do — 疾速翻开法式和文件
    PyTone 一个控制台音乐播放器
    高恪守编辑器 VIM-把持篇(2)
    Cankiri:玲珑实用的屏幕录像机
    LiVES 0.9.6pre4
  • 原文地址:https://www.cnblogs.com/yuuwee/p/6610404.html
Copyright © 2011-2022 走看看