吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2096|回复: 4
收起左侧

[Python 转载] 雨YU课堂自动预习程序

[复制链接]
不负韶华 发表于 2020-6-6 09:39
用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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

XMAN370 发表于 2020-6-6 10:04
雨课堂每页要求阅读时间好像是根据字数决定的  研究一下吧      这可是解放劳苦学生的神级项目  加油啊
天涯89 发表于 2020-6-6 09:45
yu13740000 发表于 2020-6-6 09:49
私心作怪 发表于 2020-6-6 10:26
可以  这很v
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 04:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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