vue视频教程 网络视频直播系统 Git TensorRT jsf sed 3d jestjs android项目开发 jq获取最后一个子元素 solr索引 java手册 java线程中断 java定义变量 java泛型的使用 java调用接口 制作字幕的软件 彻底删除mysql 神剪辑教程 魔兽七个人 怎么设置迅雷为默认下载器 kontakt 图片转pdf免费软件 完美漂移辅助 fireworks 例外被抛出且未被接住 寂静城 微信昵称特殊字符保存 接口自动化测试框架 php保留两位小数 数据库密码忘了怎么办 wps宏的使用教程 小米官翻版 战地1942修改器 unpack 百小度 java苹果手机怎么发彩信 神界原罪2石像鬼迷宫 创客贴下载 苹果7好端端开不了机
当前位置: 首页 > 学习教程  > 编程语言

Python selenium模拟浏览器操作实战(武汉大学)

2020/8/31 13:46:21 文章标签:

1.项目简介

因为信息门户如果用requests发post请求进行模拟登录的操作比较麻烦(自己太low,信息门户的加密算法没搞明白),所以没办法就只能考虑通过其他途径去做。
采用selenium就是一个比较好的解决办法(虽然比较慢,但是至少能用 ),模拟浏览器输入账号密码然后点击登录即可实现登录,然后获取相关cookies等信息就可以进行后续成绩获取等操作了。

2.参考代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author : Gary

import time
from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
# options.add_experimental_option('excludeSwitches', ['enable-automation'])#提示浏览器不是selenium
chrome_options.add_argument('--headless')  # 无头
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')  # 这个配置很重要
chrome_options.add_experimental_option('excludeSwitches',
                                       ['enable-automation'])  # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium


class Selenium:
    def __init__(self):
        # self.driver = webdriver.Chrome(options=chrome_options)  # 有配置的初始化浏览器
        self.driver = webdriver.Chrome()  # 不使用有配置的,方便看操作
        self.driver.maximize_window()  # 窗口最大化

    def login(self, username, password):
        self.driver.get('http://ehall.whu.edu.cn/appShow?appId=5382714380693158')  # 走信息门户认证的教务系统url,不用输入验证码
        # 找到输入框并输入账号密码
        Username = self.driver.find_element_by_id("username")
        Username.send_keys(username)
        Password = self.driver.find_element_by_id("password")
        Password.send_keys(password)
        time.sleep(0.2)
        self.driver.find_element_by_xpath('//*[@id="casLoginForm"]/p[5]/button').click()  # 登录按钮
        try:
            # name=self.driver.find_element_by_id("ampHeaderToolUserName").text#获取姓名,内容为空,弃用
            name = self.driver.find_element_by_id("nameLable").text  # 获取学生姓名
            acade = self.driver.find_element_by_id("acade").text  # 获取学生院系
            # cookies = self.driver.get_cookies()[0]
            # print('登录成功 ...')
            # self.driver.quit()
            # html = self.driver.execute_script("return document.documentElement.outerHTML")
            html = self.driver.find_element_by_xpath('//*[@id="system"]').get_attribute('onclick')
            # 不要用 driver.page_source,那样得到的页面源码不标准
            # print(html)
            csrftoken = html.split(",")[0].split('csrftoken=')[-1]
            print('登录成功!')
            return True, acade, name, self.driver.get_cookies(), csrftoken

        except Exception as e:
            print(str(e))
            try:
                msg = self.driver.find_element_by_id("msg").text
            except Exception as e:
                # time.sleep(5)
                # cpatchaError=self.driver.find_element_by_id("cpatchaError").text
                print(str(e))
                msg = '您尝试的次数过多,请明天再试!或解决方案:通过浏览器成功登录一次信息门户。再重试认证本系统'
            # self.driver.quit()
            return False, msg


if __name__ == '__main__':
    username = 'test'  # 你的信息门户账号
    password = 'test'  # 你的信息门户账号对应的密码
    spider = Selenium()
    print(spider.login(username=username, password=password))  # 查看登录结果


3. todo或者应用

  1. 登录成功后得到的cookies可以获取自己的成绩信息(计算GPA啥的)等

简单吗,想学吗  那就加群吧:

1136192749

 


本文链接: http://www.dtmao.cc/news_show_150123.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?