某省干部网络学院 python selenium 自动学习
本帖最后由 xq2581 于 2023-6-8 09:52 编辑第一次发帖,通过再群里学习和找资料 找到了通过python selenium 浏览器自动学习 某省干部网络学院 方法 非必修课程课程先手动添加 程序循环自动播放
还未实现 部分FLASh页面播放 欢迎大佬帮忙完善,谢谢!
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
#import requests
from time import sleep
# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome(service=Service(r'C:\Program Files\Google\Chrome\Application\chromedriver.exe'))
#wd = webdriver.Chrome()
# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://wwwXXX.gov.cn/index.html')
sleep(5)
elements = wd.find_element(By.XPATH, "/html/body/div/a").click()
sleep(3)
elements = wd.find_element(By.XPATH, "//*[@id='username']")
elements.click()
elements.send_keys('你的账号')
sleep(3)
elements = wd.find_element(By.XPATH, '//*[@id="pwd"]')
elements.click()
elements.send_keys ('你的密码')
elements = wd.find_element(By.XPATH, "/html/body/div/div/div/form/div/input").click()
sleep(5)
wd.get('https://www.XXX.gov.cn/student/course_myselect.do?searchType=2&menu=course')
sleep(5)
#循环N次播放视频
i = 1
while i <= 30:
#点击我要学习
elements = wd.find_element(By.XPATH, "/html/body/div/div/div/div/div/div/div/div/input").click()
#点击播放 /html/body/div/div/div
sleep(3)
for handle in wd.window_handles:
# 先切换到该窗口
wd.switch_to.window(handle)
# 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
if '播放中...' in wd.title:
# 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
break
sleep(2)
wd.switch_to.frame("course_frm")
sleep(1)
wd.switch_to.frame("course_frame")
sleep(2)
#点击“开始学习”开始播放
elements = wd.find_element(By.XPATH, "/html/body/div/div/div").click()
sleep(700)
#关闭子窗口
wd.close()
#变更selenium窗口,回到原来的窗口
wd.switch_to.window(wd.window_handles)#对应的是第一个窗口
sleep(2)
wd.get('https://www.XXX.gov.cn/student/course_myselect.do?searchType=2&menu=course')
sleep(2)
print(i)
i += 1 wdhpsobb 发表于 2023-6-13 15:05
能详细说说吗,或者给个链接自已学
selenium的自动化有很多限制,只能记录你的操作但是不好应对特殊情况,比如说滑块,或者网络不好有元素加载慢等,甚至chormedriver还受到浏览器版本的限制,事实上并不通用,写刷课的脚本可以抓课时的上报接口,分析入参,一般会携带课程ID,观看时间等,找到上报接口直接还原请求就可以实现刷课了,一般只需要账号的Cookie或者token就可以的 Scan 发表于 2024-5-6 15:58
我见过那种执行一个js代码,课就看完了,是如何操作的呢?
分场景:
1.后端不校验实际观看时间,只在最后视频结束的时候上报一个观看完成的请求,那就直接js发起这个观看完成的请求即可
2.后端不校验实际观看时间,js也有对应模拟操作的自动化功能,类似于拖动进度条,点击按钮这种,模拟人的操作将进度条拖到底让浏览器自己去请求观看完成的接口就行
3.后端校验实际观看时间,就要去定时按频率的去上报观看请求,一般会包含观看的时长、时间戳等 flash部分可以用autoit操作 你这课程添加在哪,视频不需要看么,打开就结束》 这种 方法有点土拨鼠{:1_918:}
河北干部网络学院? 感谢分享 这个站点没有验证码需要过? 洞见未来 发表于 2023-6-8 17:03
这个站点没有验证码需要过?
没有验证吗 FCGkitty 发表于 2023-6-8 13:18
你这课程添加在哪,视频不需要看么,打开就结束》
wd.get('https://www.XXX.gov.cn/student/course_myselect.do?searchType=2&menu=course') 这里就是视频列表 每次都是点击第一个 该说不说,这方法有点。。。。。你可以抓个上报接口然后写个py脚本放服务器挂的