九、Python+Selenium模拟登录

 研究QQ登录规则的话,得分析大量Javascript的加密解密,比较耗时间。自己也是练习很少,短时间成功不了。所以走了个捷径。

Selenium是一个WEB自动化测试工具,它运行时会直接实例化出一个浏览器,完全模拟用户的操作,比如点击链接、输入表单,点击按钮提交等。所以我们使用它可以很方便的来登录。

但是作为新手还是多多分析,尽量少用这个,以便提高自己的技术。在研究几天,在写一个自己满意的。

import time
# import random
from bs4 import BeautifulSoup
from selenium import webdriver


class Tencent():
    def __init__(self, qq, pwd, url):
        # PhantomJS设置了环境变量,所以可以直接用
        self.driver = webdriver.PhantomJS()
        self.qq = qq
        self.pwd = pwd
        self.url = url

    def login(self):
        '''登录'''
        self.driver.get(self.url)
        time.sleep(2)
        # 登录界面
        try:
            self.driver.find_element_by_class_name('mod-entry-login').click()
            time.sleep(1)
            self.driver.find_element_by_class_name('btns-enter-qq').click()
            # 登录表单在页面框架中,切换到该框架
            self.driver.switch_to.frame('login_frame_qq')
            #time.sleep(random.random())
            self.driver.find_element_by_id('switcher_plogin').click()
            time.sleep(1)
            self.driver.find_element_by_id('p_low_login_enable').click()
            # time.sleep(random.random())
            # 账号与密码
            self.driver.find_element_by_id('u').clear()
            self.driver.find_element_by_id('u').send_keys(self.qq)
            # time.sleep(random.random())
            self.driver.find_element_by_id('p').clear()
            self.driver.find_element_by_id('p').send_keys(self.pwd)
            # 登录界面截图
            self.driver.save_screenshot('login.png')
            # 点击登录
            self.driver.find_element_by_id('login_button').click()
            time.sleep(2)
            # 登录成功截图
            self.driver.save_screenshot('success.png')
            # 全部订单页面
            self.driver.get("https://ke.qq.com/user/index/index.html#sid=signup")
            # 全部订单界面截图

            self.driver.save_screenshot('all_course.png')
        except:
            print('出错误了,请重试')

        else:
            self.extract()
        finally:
            self.driver.quit()

    def extract(self):
        while True:
            time.sleep(1)
            soup = BeautifulSoup(self.driver.page_source, 'lxml')

            course_list = soup.select('.bm-menu-info-top a')
            # print(course_list)
            # print(type(course_list))

            for i in course_list:
                print(i.get_text().strip())
            time.sleep(2)
            try:
                self.driver.find_element_by_class_name('page-next-btn').click()
            except:
                print('多报点课程,好好学习')
                break
            if soup.select('a.page-next-btn.page-btn-dis'):
                break


if __name__ == '__main__':
    # course = Tencent('3589307418', 密码, 'https://ke.qq.com/')
    course = Tencent('1343215444', 密码, 'https://ke.qq.com/')
    course.login()

 结果:

深入浅出带你学Python冲击年薪30万【马哥教育】
人工智能+Python 2016基础班【博学谷】
Python高级开发 Flask 爬虫 Openstack Django
7天教你学会数学建模与Matlab编程(限时体验)
C语言游戏服务器开发
C/C++编程终极课程【Po学校】
3dmax动画模型蒙皮技术【朱峰社区】
系统集成项目管理工程师培训视频
3DMAX+AE棋牌新教室片头制作【幻维炫动】
3dmax插件thinkingparticle基础—蒲公英飘散效果【幻维炫动】
3dmax粒子运动的足球教程【朱峰社区】
PF粒子系统——粒子喷泉体验课
PS淘宝美工 平面设计 海报设计产品精修 10年资深设计师带你起飞
3DMAX新手游戏建模入门-CG模型-MAYA-艾巴优教育
游戏动画biped骨骼系统上
游戏动画biped骨骼系统下
游戏动画biped骨骼系统中
cad教程之AutoCAD练习图教程300例
2018年3月全国计算机等级考试二级公共基础知识视频课全套
全国计算机等级考试二级C语言程序设计培训国二C语言操作视频

 隐起来的结果:

Python从零基础到项目实战
多报点课程,好好学习

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏安恒信息

黑客通过JavaScript漏洞破解谷歌眼镜

近日,一个存在于谷歌眼镜的安全漏洞被发现,能够让攻击者轻易执行任意代码。事实上,这个漏洞可以追溯到去年下半年安全研究人员在Android 4.1系统中发...

42380
来自专栏专知

【专知-Java Deeplearning4j深度学习教程06】用卷积神经网络CNN进行图像分类

【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视...

2.2K100
来自专栏逸鹏说道

浅谈web网站架构演变过程

前言   我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。   该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品...

2K610
来自专栏逸鹏说道

在创建带输出参数和返回值的存储过程时---犯下的一个低级错误

异常处理汇总-数据库系列 http://www.cnblogs.com/dunitian/p/4522990.html 后期会在博客首发更新:http://d...

297110
来自专栏逸鹏说道

逆天通用水印扩展篇~新增剪贴板系列的功能和手动配置,卸除原基础不常用的功能

常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.n...

303100
来自专栏逸鹏说道

ExecuteReader在执行有输出参数的存储过程时拿不到输出参数

异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 后期会在博客首发更新:http://dnt...

38270
来自专栏小樱的经验随笔

Javac编译时出现包不存在的报错的解决方案

今天在学习包类调用时出现如下错误: ? packa包不存在,在C盘目录下应该有这个包啊 ? 原因是在当前目录下没找到,因为packa存放在其它目录下 如何解决:...

47960
来自专栏技术碎碎念

dom4j 使用总结

dom4j是一个Java的XML API,类似于jdom,用来读写XML文件 dom4j的使用方法简单总结来说如下: ①可以创建一个新的xml文件 ②利用SAX...

42480
来自专栏逸鹏说道

万恶的剪贴板==》为存储而生

近几天逆天经常大量复制粘贴一些图文信息,在某些特定的场合,图片都是无法直接粘贴进去的,就比如博客园的编辑器。 源码:https://github.com/dun...

31280
来自专栏逸鹏说道

new and override

昨天有个网友问我继承里面的new和override关键词有啥区别,呃,我们来看个例子就知道了 new ==》隐藏父类同名方法 override==》覆盖 定义...

35380

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励