吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 3774|回复: 68

[其他] python实现雨课堂自动预习

  [复制链接]
不负韶华 发表于 2020-6-6 09:49 | 显示全部楼层 |阅读模式

用selenium和python的win32api库实现了一个雨YU课堂自动预习的脚本,第一次需要登录,会自动存储cookies,
全程只需要手动输入网址,和页数其他自动完成,
如果里面有题目的话,这个脚本还做不了哈,而且使用的时候鼠标要放在浏览器窗口
selenium没有实现鼠标滚轮滑动的库
有也是旁边要有scroll,而YU课堂没有
就想到了win32api,但这也是缺陷,没有涉及底层的代码,
会js的小伙伴可以试一试用js完成中间的浏览步骤,可能代码更简洁。
下面放上代码,
仅供学习交流,不是偷懒的工具哦!!!!!!!!!!
# coding:utf-8
# time:2020.6.5.19:30
# auther:小生
# website:

from selenium import webdriver
import time
import win32api
import win32con
from datetime import datetime
from datetime import timedelta
import random
import os
import json

"""使用时,请将鼠标放到浏览器内,暂时没有想到更好的方法,要时刻观察控制台,
   自动打开浏览器后会提示你输入网址,如果第一次使用,没有可供使用的cookies,
   那么控制台会提示登录,30秒足够了。没有设置selenium的页面等待,然后会自动
   打开页面,然后控制台会提示输入页数,输入即可,鼠标放到浏览器窗口,你可以吃饭,
   去上厕所,或者去玩,总之你开心就好。
"""
class Rainclass(object):
    driver_path = r"D:\Python\chromedriver\chromedriver.exe"
    time_all = 0
    num = 1
    def __init__(self):
        self.driver = webdriver.Chrome(executable_path=Rainclass.driver_path)
        self.url = input("请输入要自动完成页面的网址:")
        # self.url = "https://changjiang.yuketang.cn/v2/web/studentCards"
        self.driver.get(self.url)

    def initial_judge(self):
        if os.path.exists("rainclass.txt"): # 判断是否当前文件夹有存在存储cookies的文件
            print("cookies存在")
            self.send_cookies()
        else:
            self.get_cookies()
            print("cookies不存在")

    def get_cookies(self):
        print("将沉睡30秒,瞅啥呢,赶紧登录,老子要拿cookies")
        time.sleep(30)
        distcookies = self.driver.get_cookies()
        jsoncookies = json.dumps(distcookies)
        with open("rainclass.txt", "w")as fp:
            fp.write(jsoncookies)
            print("拿取cookies成功,正在进行下一步,登录")
        time.sleep(1.5)
        self.send_cookies()

    def send_cookies(self):
        with open("rainclass.txt", "r", encoding="utf-8")as fp:
            liscookies = json.loads(fp.read())
        for cookie in liscookies:
            cookie_dic = {
                "domain": "changjiang.yuketang.cn",
                "expiry": cookie.get("expiry"),
                "httpOnly": cookie.get("httpOnly"),
                "name": cookie.get("name"),
                "path": "/",
                "secure": cookie.get("secure"),
                "value": cookie.get("value")
            }
            self.driver.add_cookie(cookie_dic) # cookies加入并刷新
        self.driver.refresh()
        time.sleep(2)   # 别给人服务器造成太大压力
        self.run()

    def run(self):
        first_page = self.driver.find_element_by_xpath('//div[@class="ppt_img_box"]')
        first_page.click()
        print("此页面将停留2秒,页面将自动打开,请将鼠标放在浏览器窗口")
        # self.driver.set_window_size(1000,300000)
        # self.driver.execute_script("window.scrollBy(0,1000)","")
        all_page = int(input("请输入页数:"))
        selector = self.driver.find_element_by_xpath('//div[@class="slide_layer"]')
        selector.click()
        time.sleep(3)
        # all_seconds = all_page*5+0.5
        self.time0 = datetime.now()
        while True:
            # if datetime.now()-self.time0<timedelta(seconds=all_seconds): # 起初固定秒数,后来发现这样有的预习不上,变成随机选择
            """一开始固定秒数,后来发现这样有的预习不上,变成随机选择,
                一开始是通过对比时间差来判断是否完成预习,0.5秒是容
                错量,防止因为网络原因预习不上。
                后来改成了更傻的方式,直接判断页数。
                下面选择的列表我闹着玩的,完全可以random.randit哈。
            """
            if self.num < all_page:
                win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 0, 0, -1)
                time_li = [4, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5, 5.21, 5.3, 5.4, 5.5, 5.6, 5.7, 7.8, 5.9, 6
                time_rand = random.choice(time_li)
                time.sleep(time_rand)
                print(str("预习秒数为:")+str(time_rand))
                # self.time_all = self.time_all+time_rand
                self.num+=1
                print("{}页可能已经预习完成".format(self.num))
            else:
                print("*"*20+"预习可能已经完成"+"*"*20)
                print("*"*20+"预习可能已经完成"+"*"*20)
                break


if __name__ == '__main__':
    clas = Rainclass()
    clas.initial_judge()

结果

结果
7.png
1.png
2.png
3.png
4.png
5.png

评分

参与人数 8HB +6 THX +4 收起 理由
消逝的过去 + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
娄胖胖 + 1
微熊猫 + 2
agan8888 + 1
贰零贰贰 + 1 + 1
ldljlzw + 1
playboy + 1

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
1946010 发表于 2020-6-6 18:40 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
冷漠@少年 发表于 2020-12-26 08:38 | 显示全部楼层

受教了,很好的文章
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
gEL1730 发表于 2022-2-26 16:41 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
sjhvBc 发表于 2022-2-26 16:47 | 显示全部楼层

感谢楼主
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zwd841 发表于 2022-2-26 22:28 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
pHDonSI 发表于 2022-2-28 10:25 | 显示全部楼层

感谢楼主
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
nNDtsS316 发表于 2022-3-1 04:12 | 显示全部楼层

论坛的繁荣离不开你们的热心分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
GRdlFyoXp 发表于 2022-3-1 09:27 | 显示全部楼层

感谢楼主
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
tiEo943 发表于 2022-3-1 09:41 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表