前段时间为了缓解网课压力,遂自己编了一个程序用来自动刷网课。有两种方法。一种是完全模拟人的操作,利用鼠标移动点击等来实现刷网课,另一种方法是通过网页代码的后台代码操作,实现自动刷网课,解放了鼠标。

from selenium import webdriver
import time
import json
import re
import pyautogui
#webdriver位于python安装目录下,不在的可以加入路径实现访问
option = webdriver.ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-logging','enable-automation'])#无黑窗,无显示自动化控制,网页全屏等方法的加入位置。
#option.add_argument('--headless') #浏览器后台运行模式
option.add_argument('-kiosk')
'''driver= webdriver.Chrome(options=option)
driver.get("https://www.shiguangkey.com/i/course") 
time.sleep(20)#20秒内登录
with open('cookies.txt','w') as cookief:
    #将cookies保存为json格式
    cookief.write(json.dumps(driver.get_cookies()))
driver.close()'''
#以上方法为保存登录的cookief数据,实现不用输入账号录
driver = webdriver.Chrome(options=option) driver.maximize_window() #记得写完整的url 包括http和https driver.get("https://www.shiguangkey.com/i/course") #访问网站 #首先清除由于浏览器打开已有的cookies driver.delete_all_cookies() with open('d:\python爬虫\cookies.txt','r') as cookief: #使用json读取cookies 注意读取的是文件 所以用load而不是loads cookieslist = json.load(cookief) for cookie in cookieslist: driver.add_cookie(cookie) driver.refresh()#刷新一下,显示登陆后的界面 time.sleep(10) driver.find_element_by_id('课程icon').click() time.sleep(2) driver.find_element_by_xpath('//*[@id="reactRoot"]/div[2]/div[2]/div/div[2]/div/div/div[2]/div[2]/button').click() windows = driver.window_handles # 切换到当前最新打开的窗口 driver.switch_to.window(windows[-1]) time.sleep(10) tit=driver.find_elements_by_css_selector('.title___zo-0q') while(len(tit)==0): tit=driver.find_elements_by_css_selector('.title___zo-0q') driver.execute_script("arguments[0].scrollIntoView();",tit[11]) #zuo=tit[11].location #pyautogui.moveTo(zuo['x']*1.25,zuo['y']*1.25) tit[11].click() i=12 while(i<len(tit)): while(1): time.sleep(30) ti=driver.find_element_by_css_selector('.pv-time-wrap.pv-xxsmall-hide').get_attribute('innerHTML') po=re.findall(r"[0-9]+:[0-9]+",ti) ytime=int(po[0][0:2])*60+int(po[0][3:5]) atime=int(po[1][0:2])*60+int(po[1][3:5]) if(atime==ytime): print(tit[i-1].text+' 已完成\n') driver.refresh()#潭州课堂网课设计有问题,网页版有时候,看完得刷新一下才有记录,很大的坑。。。。 time.sleep(5) tit=driver.find_elements_by_css_selector('.title___zo-0q') time.sleep(4) while(len(tit)==0): tit=driver.find_elements_by_css_selector('.title___zo-0q') driver.execute_script("arguments[0].scrollIntoView();",tit[i]) time.sleep(2) #zuo=tit[i].location 此为鼠标移动方法,获得元素坐标 time.sleep(2) #pyautogui.moveTo(zuo['x']*1.25,zuo['y']*1.25) 移动至元素目标 time.sleep(2) #pyautogui.doubleClick() 双击元素 tit[i].click() i=i+1 break driver.quit()

网课自动部分绿色为完全模拟人为操作的方法,定位的偏差根据相应的电脑分辨率等进行修改,相应的方法网上都有,可以直接运行的为代码的层面的实现。

posted on 2020-12-18 19:35  pcontain  阅读(400)  评论(0)    收藏  举报