1.购买服务器阿里云:服务器购买地址https://t.aliyun.com/U/E8o0aM若失效,可用地址
阿里云:
服务器购买地址
https://t.aliyun.com/U/E8o0aM若失效,可用地址
https://www.aliyun.com/daily-act/ecs/activity_selection?source=5176.29345612&userCode=49hts92d腾讯云:
https://curl.qcloud.com/wJpWmSfU若失效,可用地址
https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=ad201ee2ef3b771157f72ee5464b1fea&from=console华为云
https://activity.huaweicloud.com/cps.html?fromacct=64b5cf7cc11b4840bb4ed2ea0b2f4468&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=2019052.部署教程
3.代码如下
from selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECimport timeimport random# --- 配置部分 ---LOGIN_URL = "https://kunpeng.askpcb.com/login.html" # 替换为你的实际登录页URLVIDEO_URL = "https://kunpeng.askpcb.com/kng/#/course/play?kngId=0040e5d6-5f0e-405d-8fb3-d2233eceb3d0&projectId=&btid=&gwnlUrl=&locateshare=94d6a796-d46a-4c28-a12d-3287c5c2d283" # 替换为你想看的视频页面URLCHROMEDRIVER_PATH = "E:\chromedriver-win64\chromedriver.exe" # 如果没加到PATH,需要指定驱动路径WATCH_TIME_SECONDS = 300 # 计划观看时长(秒)# ---------------# ---------------service = Service(executable_path=CHROMEDRIVER_PATH)driver = webdriver.Chrome(service=service)try:# 1️⃣ 打开登录页driver.get(LOGIN_URL)print("\n" + "="*50)print(" 🛑 请在打开的浏览器中手动登录")print(" ⏳ 正在自动检测登录状态...")print("="*50 + "\n")# 自动检测登录状态,出现首页按钮即认为已登录login_success = Falsefor i in range(60): # 最多等待60秒try:# 检查页面是否出现"首页"按钮driver.find_element(By.XPATH, '//a[@href="/main/#/index" and contains(text(), "首页")]')login_success = Trueprint("🚀 检测到首页按钮,已登录,脚本继续执行...")breakexcept:time.sleep(1)if not login_success:print("❌ 未检测到登录成功(未找到首页按钮),请检查账号或网络!")driver.quit()exit(1)# 2️⃣ 登录成功后,跳转到视频页面driver.get(VIDEO_URL)print("🎬 视频页面已加载")time.sleep(5)# 3️⃣ 尝试播放视频(原有逻辑)# ✅ 确保视频在播放try:# 方法1:通过内部 span 文字定位try:play_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//button[.//span[text()="开始学习"]]')))play_button.click()print("▶️ 已点击'开始学习'按钮")except:# 如果找不到"开始学习"按钮,尝试找"继续学习"按钮continue_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//button[.//span[text()="继续学习"]]')))continue_button.click()print("▶️ 已点击'继续学习'按钮")except Exception as e:print(f"⚠️ 未找到或无法点击播放按钮: {e}")# 4️⃣ 保持观看...(无限时长,持续保持页面活动)print("⏳ 已进入视频页面,自动保持活动,无时间限制。按 Ctrl+C 退出。")while True:driver.execute_script("window.scrollBy(0, 1);")time.sleep(random.randint(10, 30))except Exception as e:print(f"❌ 发生错误: {e}")finally:driver.quit()print("👋 浏览器已关闭")# # ⚠️ 备选方案:直接点击隐藏的 checkbox input(不推荐,可能被遮挡)# try:# agree_element = WebDriverWait(driver, 10).until(# EC.presence_of_element_located((By.XPATH, '//label[@class="yxt-checkbox core-custom-checkbox"]//span[contains(text(), "已阅读并同意")]'))# )# # 使用 JavaScript 点击(绕过 Selenium 原生点击限制)# driver.execute_script("arguments[0].click();", agree_element)# print("✅ 已通过 JS 点击同意隐私政策")# except Exception as e:# print(f"⚠️ JS点击同意条款失败: {e}")# driver.save_screenshot("js_click_error.png") # 截图留证# # 2️⃣ 定位用户名输入框 —— 使用 placeholder 或 class 定位(因为 name="username" 有歧义)# username_field = WebDriverWait(driver, 10).until(# EC.presence_of_element_located((By.XPATH, '//input[@placeholder="请输入员工邮箱/账号"]'))# )# username_field.clear()# username_field.send_keys(USERNAME)# print("✅ 已输入用户名")# # 3️⃣ 定位密码输入框 —— 使用 type="password" + class 定位# password_field = WebDriverWait(driver, 10).until(# EC.presence_of_element_located((By.XPATH, '//input[@type="password" and @class="yxtf-input__inner yxtf-input__inner--border"]'))# )# password_field.clear()# password_field.send_keys(PASSWORD)# print("✅ 已输入密码")# # ✅ 终极方案:手动派发 mousedown -> mouseup -> click 事件# try:# login_button = WebDriverWait(driver, 10).until(# EC.presence_of_element_located((By.XPATH, '//button[span/span[text()="登 录"]]'))# )# # 滚动到按钮# driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", login_button)# time.sleep(1)# # 手动派发三个事件(模拟真实点击)# driver.execute_script("""# var btn = arguments[0];# // 模拟鼠标按下的事件# var evt1 = new MouseEvent('mousedown', {# bubbles: true,# cancelable: true,# view: window,# clientX: btn.getBoundingClientRect().left + btn.offsetWidth / 2,# clientY: btn.getBoundingClientRect().top + btn.offsetHeight / 2# });# btn.dispatchEvent(evt1);# // 模拟鼠标抬起的事件# var evt2 = new MouseEvent('mouseup', {# bubbles: true,# cancelable: true,# view: window,# clientX: btn.getBoundingClientRect().left + btn.offsetWidth / 2,# clientY: btn.getBoundingClientRect().top + btn.offsetHeight / 2# });# btn.dispatchEvent(evt2);# // 模拟点击事件(通常由 mousedown+mouseup 触发)# var evt3 = new MouseEvent('click', {# bubbles: true,# cancelable: true,# view: window,# clientX: btn.getBoundingClientRect().left + btn.offsetWidth / 2,# clientY: btn.getBoundingClientRect().top + btn.offsetHeight / 2# });# btn.dispatchEvent(evt3);# """, login_button)# print("✅ 已模拟完整鼠标事件点击登录按钮")# except Exception as e:# print(f"❌ 模拟鼠标事件失败: {e}")# driver.save_screenshot("mouse_events_fail.png")# raise# # 5️⃣ 等待登录跳转完成(比如URL变化或出现某个元素)# try:# home_link = WebDriverWait(driver, 20).until(# EC.presence_of_element_located((By.XPATH, '//a[@href="/main/#/index" and contains(text(), "首页")]'))# )# print("✅ 登录成功!检测到'首页'链接")# except Exception as e:# print(f"❌ 登录失败:未检测到'首页'元素,可能账号密码错误或网络问题")# driver.save_screenshot("login_failed_no_home.png")# raise # 停止脚本,方便调试# # 6️⃣ 跳转到视频页面# driver.get(VIDEO_URL)# print("🎬 视频页面已加载")# time.sleep(5)# # 7️⃣ 尝试播放视频(原有逻辑,根据你视频页元素修改)# try:# play_button = driver.find_element(By.XPATH, '//button[contains(text(), "播放")]') # 示例,需根据实际修改# play_button.click()# print("▶️ 播放按钮已点击")# except Exception as e:# print(f"⚠️ 未找到播放按钮: {e}")# # 8️⃣ 保持观看...# WATCH_TIME_SECONDS = 300# print(f"⏳ 开始观看视频,计划时长 {WATCH_TIME_SECONDS} 秒...")# start_time = time.time()# while time.time() - start_time < WATCH_TIME_SECONDS:# driver.execute_script("window.scrollBy(0, 1);")# time.sleep(random.randint(10, 30))# print(f"⏱️ 已观看 {int(time.time() - start_time)} 秒")
该脚本为鲲鹏学苑自动刷视频任务脚本,主要作用包括:
手动完成一次登录(脚本负责检测是否已登录);
自动跳转到指定课程视频页面;
尝试点击"开始学习/继续学习"进入播放;
通过定时轻微滚动页面,保持页面活跃以防止暂停或超时;
以无限时长方式持续"观看"(需要你 Ctrl+C 结束)。
主要方法
Selenium 初始化
Service(executable_path=CHROMEDRIVER_PATH)+webdriver.Chrome(service=service)
启动 ChromeDriver 与浏览器实例。登录流程(人工登录 + 自动检测)
driver.get(LOGIN_URL)打开登录页;循环 60 次每秒检查一次:是否出现
//a[@href="/main/#/index" and contains(text(), "首页")]
若匹配到"首页"链接,则判定登录成功,继续后续流程;否则 60 秒后退出。用意:你在打开的浏览器里手动输入账号验证码,脚本只负责检测登录状态。
进入视频页并尝试播放
//button[.//span[text()="开始学习"]]//button[.//span[text()="继续学习"]]driver.get(VIDEO_URL)跳转到指定视频页;使用
WebDriverWait(...).until(EC.element_to_be_clickable(...))
依次尝试点击:用意:兼容首次学习和继续学习两种按钮文案,确保进入播放状态。
保持活跃(防止超时/暂停)
进入无限循环:
driver.execute_script("window.scrollBy(0, 1);")
time.sleep(random.randint(10, 30))每 10–30 秒做一次 1px 的轻微滚动,模拟用户活动。
用意:防"长时间未操作"的弹窗或被动暂停;没有固定观看时长,需要手动 Ctrl+C终止。异常处理与退出
外层
try/except/finally:发生异常时打印错误;finally中driver.quit()确保关闭浏览器与驱动。
备注
脚本顶部的
WATCH_TIME_SECONDS = 300并未实际使用(当前实现是无限循环);如果你想按固定时长观看,可将while True改为基于起始时间判断的循环。XPATH 选择器依赖站点的具体 DOM 结构("开始学习/继续学习"按钮文本),若站点改版,可能需要更新 XPATH。
CHROMEDRIVER_PATH需要与你本机 Chrome 版本匹配;或把驱动加入 PATH。代码里有部分注释掉的"自动填写账号/密码/点击登录按钮"备用方案,当前默认是手动登录更稳。
无头模式(
headless)未启用;如果要后台运行,需额外配置ChromeOptions。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论