精华内容
下载资源
问答
  • 目前主流的QQ邮箱登录都是本地浏览器登录 1 载入网址 w.mail.qq.com/cgi-bin/log… 如下图所示 2 输入账号密码,登录成功以后获取Cookie,然后交给爬虫去干活。 3 但是最近QQ的安全策略日趋严格,所以会出现本地...

    前言

    目前主流的QQ邮箱登录都是本地浏览器登录

    • 2 输入账号密码,登录成功以后获取Cookie,然后交给爬虫去干活。
    • 3 但是最近QQ的安全策略日趋严格,所以会出现本地网页无法登录,必须使用一键登录,如下图所示。

    解决方案

    大体思路还是必须通过用户的手机QQ扫描二维码登录,再回到登录页面进行跳转。比如51信用卡给用户的提示

    至于进行跳转的是爬虫还是直接在本地浏览器操作,这个都可以商榷。下面是操作步骤。

    同时要做两件事情 1保存这个二维码图片到本地 方便用户扫码登录、2 获取本地Cookie中Name位pt_login_sig的Value 如下图所示,在载入QQ登录页面的时候 会写入这个Cookie

    • 2 有了pt_login_sig这个值以后可以本地执行Get请求地址为

    • ssl.ptlogin2.qq.com/ptqrlogin?u…

      这里只需要替换login_sig的Value就行,其他的可以不用修改。一般会返回两种结果

    ptuiCB('66','0','','0','二维码未失效。(3635426236)', '')

    这种表示二维码可用默认为2分钟

    或者

    ptuiCB('0','0','ssl.ptlogin2.mail.qq.com/check_sig?p…', 'CeShi')

    这个时候需要请求一下返回的网址,直接请求,不需要做任何替换。 如果执行成功会直接登录邮箱并且会收到提醒消息如图

    后续就会跳转成功。继续执行后面的操作

    展开全文
  • python之js破解qq邮箱登录

    千次阅读 热门讨论 2019-05-20 15:29:52
    前言 请勿用于商业用途,仅供学习 该登录方式为账号-密码登录,只能登录经常...qq邮箱登录地址 正文 1 找到js文件,打断点 输入账号和错误的密码,可以看到有两个请求,一个check,一个login。check会根据账号返...

    前言

    1. 请勿用于商业用途,仅供学习
    2. 该登录方式为账号-密码登录,只能登录经常登录的账号,登录他人账号,只能进行扫码
    3. 感谢这个博客的帮助 https://blog.csdn.net/illbehere/article/details/53262033
    4. qq邮箱登录地址

    正文

    1 找到js文件,打断点

    在这里插入图片描述
    输入账号和错误的密码,可以看到有两个请求,一个check,一个login。check会根据账号返回一些参数,这些参数会使用在login里。
    在这里插入图片描述
    采用xhr的方式寻找js文件,你会发现然并卵,不会有断点停住的。
    正确的寻找js文件,是监听登录按钮的点击事件。
    在这里插入图片描述
    一步一步往下执行的结果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这个i.p就是login登录里面的参数p,也就是加密后的密码,是重点要破解获取的。
    在这里插入图片描述

    2 寻找pt.plogin.salt

    分析这个函数的参数

    i.p = $.Encryption.getEncryption(n, pt.plogin.salt, i.verifycode, pt.plogin.armSafeEdit.isSafe)
    

    n:是密码明文
    pt.plogin.salt:暂时不明是个啥
    i.verifycode:是check返回的参数之一
    pt.plogin.armSafeEdit.isSafe:无意义,undefined

    pt.plogin.salt全局搜索一下,可以看到调用了uin2hex的函数,参数是不带@qq.com的账号。跟进去,可以看到该函数的具体实现。
    在这里插入图片描述
    在这里插入图片描述
    可以试验一下,这个函数是否正确,使用Snippets,查看控制台输入是否跟断点显示的一样。
    在这里插入图片描述

    3 分析h函数

    所需参数分析完了,进入getEncryption函数,可以看到h函数,h函数是加密密码的主函数
    在这里插入图片描述
    主函数里面有各种函数的调用栈,非常复杂繁琐,一层跟进又一层,我原本尝试着一层一层跟进去,取出里面所涉及到的方法,后来分析到rsa_encrypt这个函数,彻底放弃了,方法太多,我取函数名都取得晕晕的,担心函数撞名,毕竟人家混淆后用abcd来命名,我们跟着这么命名会重复的,而且万一哪里出错了,你还得一个一个去核对函数是否正确。最后我发现所有涉及的函数都在c_login_2.js里面,所以我全部复制黏贴了,放到了sublime里面去查看
    在这里插入图片描述
    放到sublime里面一看,有4653行,还好不算很多。里面有很多方式是用不到的,所以接下来我们要取出主要涉及登录的函数部分。
    首先 根据 function h(e, i, n, o),判断包含这个函数的函数是需要的,往上翻,可以看到h函数是存在$.Encryption = $pt.Encryption = function() 这里的,然后把这个函数全部复制黏贴下来。
    在这里插入图片描述
    然后看看h函数里面有涉及到哪些函数。仔细分析下h函数,看红色框框,凡是这种t,g,r这样的,都是跟h函数是同一个函数体下面的,刚刚已经复制黏贴了,不用管了。看看蓝色框框,有个TEA,不知道是哪个啥,全局搜索找到TEA的函数体,然后复制黏贴下来。之后同理找到黄色框框RSA涉及到的函数体。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    找到之后,复制黏贴发现才1000行,之后我们要保证,这些js代码,能够脱离单独运行。在一个新的窗口打开,新建一个snippet文件。不要在qq邮箱登录地址的窗口打开,因为它的js文件已经加载了,你运行js代码,是不会报任何错的。
    在这里插入图片描述
    接下来就进行js文件修改,让它可以脱离原本的js文件加载运行起来。

    4 修改js文件

    前面有个uin2hex的函数,这个函数也复制进去,我们要获取salt,然后调用h函数看看,会不会报什么错。
    在这里插入图片描述
    4.1 $pt is not defined
    $pt我觉得只是一个指明,代号这样的,完全可以删除,把所有涉及到的 $pt.XX全部删掉,涉及到 $pt的调用,改为 $.xx的调用,比如 var h = $.RSA.rsa_encrypt(g(u + c));改完之后再运行,控制台输入了一串
    在这里插入图片描述
    把这个复制黏贴,跟抓包里面的p比一下长度,发现是一模一样的,而且我们基本没有改动关键代码,我们有理由相信,这个就是我们要的加密后的密码。之后我们放进python中,看能不能直接调用这个js。在js里面写个函数getPassword,写个py文件调用这个函数,看打印效果。

    function getPassword() {
        var n = "qerewtwret123214"
        var salt = getSalt(123456789)
        var verticode = "!C90"
        var safe = undefined
        return $.Encryption.getEncryption(n, salt,verticode , safe)
    }
    
    class QQEmail(object):
        def getPass(self):
            js_path = "%s/aaa.js" % "/".join(os.path.abspath(__file__).split("/")[:-1])
            with open(js_path, 'r') as f:
                js_content = f.read()
                ctx = execjs.compile(js_content)
                new_pwd1 = ctx.call("getPassword")
                print(new_pwd1)
                
    if __name__ == '__main__':
        q = QQEmail()
        q.getPass()
    

    4.2 $ is not defined
    $ 这个没有定义,我也不知道怎么定义,所以干脆有关用$.xxxx的调用,把 $去掉。全局搜索 $. 然后删掉。
    在这里插入图片描述
    4.3 navigator is not defined
    navigator包含浏览器有关的信息,比如Console输入navigator.appName,可以打印出"Netscape"
    在这里插入图片描述
    然后全局搜索navigator,看看哪些地方调用了它,之后console打印出来是什么,我们就替换成什么。
    在这里插入图片描述
    4.4 window is not defined
    本来想仿照navigator一样进行替换,后来发现有些对象是没法替换的,我干脆直接注释掉了。所有有关windos的我都注释了。那这样做是否会产生问题,为了检测是否出现问题,我们在snippet里面测试下,注意,有个地方window先不要注释,看下图
    在这里插入图片描述
    这个window注释掉会报另一个错,我们等会儿解决,先保留是为了看其它出现window的代码的地方,注释掉是否有问题。结果依旧可以打印出一串。暂时我们认为没有问题,接下来把上图的window删除,我们继续往下走。

    4.5 Cannot set property ‘TEA’ of undefined
    程序没有办法访问到TEA,这就奇怪了,为啥程序可以访问 Encryption.getEncryption,却不能访问TEA.strToBytes。之后我就在TEA的函数体里进行了修改
    在这里插入图片描述
    这就要看模仿能力了,反正仿着Encryption修改funciton(t)函数体,修改地方有以下几点
    1.函数体名修改
    在这里插入图片描述
    2.返回体修改

    t.TEA = {
            encrypt: function(t, e) {
                return o(a(h(t, e)))
            },
            enAsBase64: function(t, e) {
                for (var i = h(t, e), n = a(i), o = "", p = 0; p < n.length; p++)
                    o += String.fromCharCode(n[p]);
                return btoa(o)
            },
            decrypt: function(t) {
                return o(l(h(t, !1)))
            },
            initkey: function(t, e) {
                f = h(t, e)
            },
            bytesToStr: p,
            strToBytes: r,
            bytesInStr: o,
            dataFromStr: h
        };
    

    换成这样

    return {
            encrypt: function(t, e) {
                return o(a(h(t, e)))
            },
            enAsBase64: function(t, e) {
                for (var i = h(t, e), n = a(i), o = "", p = 0; p < n.length; p++)
                    o += String.fromCharCode(n[p]);
                return btoa(o)
            },
            decrypt: function(t) {
                return o(l(h(t, !1)))
            },
            initkey: function(t, e) {
                f = h(t, e)
            },
            bytesToStr: p,
            strToBytes: r,
            bytesInStr: o,
            dataFromStr: h
        }
    

    在这里插入图片描述
    之后在snippet里面测试,发现可以运行,能打印一串出来。
    在这里插入图片描述
    4.6 btoa is not defined
    在snippet里面能打印出来,但是在程序运行还是报错了,btoa是个啥子,百度一下。
    在这里插入图片描述
    这是Web的API,但是在Python中的execjs库无法使用 Web.API。这就有点犯愁了,看下代码。
    在这里插入图片描述
    可以看见,先使用g(h),然后调用btoa进行base64加密,之后替换一些特殊字符,就是我们真正需要的密码。那么我们先返回g(h)的结果,能不能我们自己仿照btoa的加密方式进行加密?然后再调用replace替换,就是说,我们自己写一个bota。
    感谢这个博客:https://www.cnblogs.com/JokerWu/p/9456241.html
    具体实现如下
    首先js文件中

        function h(e, i, n, o) {
            n = n || "",
                e = e || "";
            for (var p = o ? e : t(e), r = g(p), s = t(r + i), a = TEA.strToBytes(n.toUpperCase(), !0), l = Number(a.length / 2).toString(16); l.length < 4;)
                l = "0" + l;
            TEA.initkey(s);
            var c = TEA.encrypt(p + TEA.strToBytes(i) + l + a);
            TEA.initkey("");
            for (var u = Number(c.length / 2).toString(16); u.length < 4;)
                u = "0" + u;
            var h = RSA.rsa_encrypt(g(u + c));
            return setTimeout(function () {
                d(488358, 1)
            }, 0), g(h)
            // btoa(g(h)).replace(/[\/\+=]/g, function(t) {
            //     return {
            //         "/": "-",
            //         "+": "*",
            //         "=": "_"
            //     }[t]
            // })
        }
    
        function Btoa(str) {
            return str.replace(/[\/\+=]/g, function (t) {
                return {
                    "/": "-",
                    "+": "*",
                    "=": "_"
                }[t]
            })
        }
        ...........
        return {
            getEncryption: h,
            getRSAEncryption: f,
            md5: t,
            salt: getSalt,
            getBtoa: Btoa   //注意这个哦,要调用Btoa的方法
        }
        
    function btoaReaplace(str) {
        var btoa  = Encryption.getBtoa(str);
        return btoa
    }
    

    然后py文件中

    class QQEmail(object):
        def getPass(self):
            js_path = "%s/aaa.js" % "/".join(os.path.abspath(__file__).split("/")[:-1])
            with open(js_path, 'r') as f:
                js_content = f.read()
                ctx = execjs.compile(js_content)
                new_pwd1 = ctx.call("getPassword")
                new_pwd2 = new_pwd1.encode('latin1')
                new_pwd3 = base64.b64encode(new_pwd2)
                new_pwd4 = str(new_pwd3, 'utf-8')
                new_pwd5 = ctx.call("btoaReaplace", new_pwd4)
                # return new_pwd5
                print(new_pwd5)
    
    
    if __name__ == '__main__':
        q = QQEmail()
        q.getPass()
    

    最后,p参数分析完毕
    在这里插入图片描述

    5 拼接参数

    p参数解析出来之后,后面的就简单了。

    1. 访问qq邮箱登录地址,获取pt_login_sig
    2. 访问https://ssl.ptlogin2.qq.com/check,补齐参数,进行请求
    3. 访问https://ssl.ptlogin2.qq.com/login,补齐参数,进行请求
    4. 请求成功,获取里面的链接,进行下一步请求,这里设置禁止重定向allow_redirects=False,保存需要的cookies值,在response里面找到location,获取重定向的地址
    5. 访问重定向地址,请求成功后,获取下一个需要跳转的链接,请求该链接,这里依旧需要禁止重定向,成功后获取重定向地址
    6. 请求重定向地址,可以从response里面获取sid的值,如果你需要访问【收件箱,已发送等】需要sid的值。

    需要注意下,下图的sid很重要,基本就是通行证。如果你请求失败了,请查看你的cookie值里面是否有sid这个值。
    在这里插入图片描述

    6 登录成功

    在这里插入图片描述

    总结

    1. 利用监听事件锁定js文件
    2. 函数调用层过多,可直接根据主函数锁定所需要的函数体
    3. 根据运行出现的各种问题进行修改/调试,利用scope,观察返回值是否相同,也可以查出错误
    4. btoa函数的分解
    5. 注意cookie值的变动
    展开全文
  • 手机QQ邮箱登录不上的解决办法

    万次阅读 2017-11-05 23:50:35
    手机登录QQ邮箱登录不上报,IMAP服务关闭或用户名密码错误。  首先检查自己用户名和密码有没有输入错误,若没有请接着往下看。  这是QQ邮箱有的一种服务没开,这个需要用网页登录QQ邮箱,然后在邮箱的 设置->账户...
    手机登录QQ邮箱登录不上报,IMAP服务关闭或用户名密码错误。
    

      首先检查自己用户名和密码有没有输入错误,若没有请接着往下看。
      这是QQ邮箱有的一种服务没开,这个需要用网页登录QQ邮箱,然后在邮箱的 设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 这一项中点击开启所需要的服务,点击开启会有提示需要用密保手机号发个短信“配置邮件客户端”到腾讯科技,发送成功之后,点击“我已发送”。
      生成的手机授权码就是你手机客户端登录邮箱的密码。填入密码之后就可以使用了。(需要什么服务要开启对应的服务,腾讯这个邮箱还是有点坑的,需要用户自己发短信去验证)。

    展开全文
  • HTML+CSS 模拟QQ邮箱登录界面

    千次阅读 2019-10-18 23:36:53
    模拟QQ邮箱登录界面 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> &....

    模拟QQ邮箱登录界面

    index.html

    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>qq邮箱登录</title>
        <link rel="stylesheet" href="./css/index.css">
    </head>
    <body>
        <div class="container">
            <header>
                    <a class="header_logo" href="/">QQ邮箱</a>
                    <div class="header_link">
                        <a href="#">基本版</a>&nbsp;|&nbsp;
                        <a href="#">English</a>&nbsp;|&nbsp;
                        <a href="#" >手机版</a>&nbsp;|&nbsp;
                        <a href="#">企业邮箱</a>
                    </div>
            </header>
            <!-- style="width: 330px; height: 336px; visibility: visible; background-color: red;" -->
            <article>
                <div class="left_container">
                    
                    <div class="pictures_txt">
                        <p class="pictures_title">QQ邮箱,常联系!</p>
                        <p>1982年,第一张电脑笑脸诞生</p>
                        <p>今天,人们已经习惯用它来表达心情</p>
                        <p>现在,您也可以在邮件里</p><p>用:-)来传达一个微笑的表情</p>
                        <p class="pictures_info">
                        <a href="#">了解更多表情符号</a></p>
                            
                    </div>
                    <div class="picture"></div>
                </div>
                <div class=" login_container" >
                        <div class="login_tab">
                            <div class="login_tab_item " id="wx">微信登录</div>
                            <div class="login_tab_item active" id="qq">QQ登录</div>
                        </div>
                        <div class="login_content">
                            <div class="qq" id="qq_box">
                                    <input type="text" class="qq_text" placeholder="支持QQ号/邮箱/手机号登录">
                                    <input type="password"class="qq_text" placeholder="QQ密码">
                                    <div class="checkbox"><input type="checkbox" name="" id="">&nbsp;&nbsp;&nbsp;下次自动登录</div>
                                    <input type="submit" value="登录" class="btn">
                                    <div class="text">扫码快捷登录</div>
                                    <a href="#">忘密码?</a>
                                    
                            </div>
                            <div class="wx" id="wx_box">
                                    <div class="wx_picture">
                                            <img class="qrcode lightBorder" src="./imgs/wx.jpg">
                                            &nbsp;&nbsp;请使用微信扫描二维码登录
                                            <br>&nbsp;&nbsp;&nbsp;
                                            <div class="checkbox"><input type="checkbox" name="" id="">&nbsp;&nbsp;&nbsp;下次自动登录</div>
                                    </div>
                            </div>
                        </div>
                </div>
                
               <div class="clear"></div>
                </article>
        
    
            <footer>
                <a href="#" target="_blank">关于腾讯</a>&nbsp;|&nbsp;
                <a href="#" target="_blank">服务条款</a>&nbsp;|&nbsp;
                <a href="#" target="_blank">隐私政策</a>&nbsp;|&nbsp;
                <a href="#" target="_blank">客服中心</a>&nbsp;|&nbsp;
                <a href="#" target="_blank">联系我们</a>&nbsp;|&nbsp;
                <a href="#" target="_blank">帮助中心</a>&nbsp;|&nbsp;
                <span class="gray">©1998 - 2019 Tencent Inc. All Rights Reserved.</span>
            </footer>
        </div>
    </body>
    <script>
    window.onload = function(){
        var wx = document.getElementById('wx')
        var qq = document.getElementById('qq')
        var wxBox = document.getElementById('wx_box')
        var qqBox = document.getElementById('qq_box')
        wx.onclick = function () {
           qqBox.style.display = 'none'
            wxBox.style.display = 'block'
            wx.classList.add('active')
            qq.classList.remove('active')
        }
        qq.onclick = function () {
            wxBox.style.display = 'none'
            qqBox.style.display = 'block'
            qq.classList.add('active')
            wx.classList.remove('active')
        }
    }
    </script>
    </html>
    

    index.css

    * {
        margin: 0;
        padding: 0;
    }
    body {
        font-family: "lucida Grande",Verdana,"Microsoft YaHei";
        font-size: 12px;
    }
    a {
        color: #1d5494;
        text-decoration: none;
    }
    
    header {
        height: 62px;
        border-bottom: 1px solid #d6dfea;
        background: #eff4fa;
        zoom: 1;
    }
    article {
        height: 429px;
    }
    footer {
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        height: 37px;
        background-color: yellow;
    }
    .header_logo {
        float: left;
        
        width: 182px;
        height: 35px;
        margin-top: 14px;
        margin-left: 17px;
        text-indent: -9999em;
        
        background-repeat: no-repeat;
        background-position: left center;
        background-image:url(../imgs/qqmail_logo.png);
    }
    .header_link {
        float: right;
        overflow: hidden;
       text-decoration: none;
       margin-top: 16px;
        padding-right: 17px;
        line-height: 30px;
        text-align: right;
        color: #b6b6b6;
    }
    
    .header_link a:hover{
       
        cursor: pointer;
        text-decoration: underline;
    }
    
    article {
       width: 100%
    }
    article .clear {
        clear: both;
    }
    article .left_container {
        position: relative;
        margin-left: 180px;
        margin-top: 60px;
        float: left;
        width: 520px;
      
        height: 400px;
        overflow: hidden;
      
        
        
    }
    article .left_container .picture {
    background-image: url(../imgs/smile.jpg);
    background-position: 234px 130px;
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    height: 400px;
    _width: 100%;
    background-repeat: no-repeat;
    }
    article .left_container .pictures_txt {
        padding-top: 25px;
        position: relative;
        font-size: 14px;
        font-weight: normal;
        line-height: 24px;
    }
    article .left_container .pictures_txt p {
        display: block;
        margin-block-start: 1em;
        margin-block-end: 1em;
        margin-inline-start: 0px;
        margin-inline-end: 0px;
    }
    article .left_container .pictures_title {
        line-height: 26px;
        margin-top: 15px;
        margin-bottom: 15px;
        font-size: 24px;
        font-weight: normal;
        color: #6f95c8;
    }
    
    
    article .login_container {
        overflow: hidden;
        margin-right: 180px;
        margin-top: 60px;
        float: right;
        width: 336px;
      
        height: 389px;
        border: 1px solid #a0b1c4;
    }
    article .login_container .login_tab {
        height: 50px;
        font-size: 10px;
        border-bottom: 1px solid #a0b1c4;
        background-color: #f9fbfe;
        border-radius: 6px 6px 0 0;
    }
    article .login_container .login_tab .login_tab_item {
        float: left;
        width: 50%;
        font-size: 16px;
        line-height: 50px;
        color: #999;
        text-align: center;
        cursor: pointer;
    }
    article .login_container .login_tab .active {
        color: #333;
    }
    
    
    article .login_container .login_content {
        padding: 20px 30px;
    }
    article .login_container .login_content .qq {
    
    }
    article .login_container .login_content  .qq_text {
        width: 100%;
        height: 30px;
        margin: 5px auto;
        text-indent: 1em;
        font-size: 16px;
    }
    article .login_container .login_content .qq .checkbox {
       margin: 20px 10px;
       font-size: 13px;
    }
    article .login_container .login_content .qq .btn {
        border-radius: 6px;
        background-color: rgb(0, 132, 255);
        height: 40px;
        line-height: 39px;
        width: 100%;
        outline: none;
        font-size: 20px;
        color: #fff;
    }
    article .login_container .login_content .qq .text {
        margin-top: 10px;
        line-height: 20px;
        text-align: center;
        color: #225592;
        font-size: 16px;
    }
    article .login_container .login_content .qq a {
        display: block;
        text-align: right;
        margin-top: 40px;
    }
    article .login_container .login_content .wx{
        display: none;
    }
    
    article .login_container .login_content .wx .wx_picture {
        width: 180px;
        height: 180px;
       
        margin: 20px 20px;
        
        border-radius: 2px;
        border: none;
        padding-left: 20px;
        font-size: 14px;
    }
    article .login_container .login_content .wx .wx_picture  img {
        text-align: center;
        width: 180px;
        height: 180px;
    }
    footer {
        position: fixed;
        
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 2;
        clear: both;
        line-height: 36px;
        text-align: center;
        color: #b6b6b6;
        background-color: #eff4fa;
        border-top: 1px solid #d6dfea;
    }
    
    
    展开全文
  • python模拟实现QQ邮箱登录

    千次阅读 2019-04-10 22:02:19
    模拟登录qq邮箱 ''' # 打开浏览器 wd = webdriver.Chrome() # 隐式等待时间 wd.implicitly_wait(10) # 打开QQ邮箱地址 wd.get("https://mail.qq.com") # 调整窗口大小 wd.set_window_size(1200,1000) # 切换iframe ...
  • web之qq邮箱登录界面

    千次阅读 2019-07-31 21:45:15
    我们可以用css来做这个登录的表格 具体的完整代码实现如下: <!DOCTYPE html> <... <meta charset="utf-8">...登录qq邮箱</title> <style type="text/css"> * { padding: 0; margi...
  • 使用Selenium对QQ邮箱登录页面进行自动化测试 1.测试需求 Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla ...
  • 实战02-selenium模拟QQ邮箱登录并批量爬取指定邮件的附件1.功能需求2.直接上代码3.数据作证4.掉坑经历 1.功能需求 诞生的背景:作为一个学委,尤其受疫情影响,同学发的一大堆邮件单个下载非常耗时,而且无聊。 由此...
  • HTML+CSS 仿QQ邮箱登录界面

    万次阅读 多人点赞 2019-02-04 15:49:09
    登录qq邮箱 * { padding : 0 ; margin : 0 ; } .header { height : 60px ; width : 100% ; background : blue ; } .content { width : 1100px ; height : 500px ; margin :...
  • from Commomlib.Commonlib import Common class Login(Common): ''' 继承Common类 ''' def login(self, user, pwd): # 跳转到QQ邮箱 self.open_url('https://mail.qq.com/cgi-bin/log...
  • 仿qq邮箱登录界面(html+css)

    万次阅读 多人点赞 2017-09-06 22:14:26
    快速登录 账号密码登录 </div>
  • import unittest from Bussniess.login import Login class Testcase(unittest.TestCase): ''' 继承unittest的TestCase类 ''' def setUp(self): print('执行登录开始') def tearDown(self)...
  • 原理很简单,往你个人的kindle邮箱发邮件,附件为你要推送的内容即可。 登录亚马逊官网,点击管理我的内容和设备,进入设置,找到 〖发送至Kindle〗电子邮箱, 记这个邮箱为A 然后你需要有个自己的常用邮箱
  • QQ邮箱设置自定义域名邮箱

    万次阅读 2018-06-03 10:30:54
    首先理解一下,qq邮箱设置域名邮箱,其实就是给你的qq邮箱起个别名而已,可以用自定义邮箱去收发邮件,但是邮件还是在qq邮箱里。 1、进入qq邮箱设置–&amp;amp;amp;amp;gt;账户–&amp;amp;amp;amp;gt;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 185,778
精华内容 74,311
关键字:

qq邮箱登录