一. 痛点
运维侠小白有下面烦恼,听说deepseek可以帮助提升学习python的效率,可是deepseek给的代码也报错,怎么办?

deepseek生成的代码也有可能报错,例如:

⏰执行报错:由提示得知,是少导入需要的模块,但是补全,还是报错,这就是deepseek的局限性。需要继续发问,才能解决。

完整解决报错后代码:

多尝试,困难才会被克服
学习就像追妹子,你只能看到背影,但只要坚持日积月累的付出,迟早她整个人属于你❤。

二.准备工作
⚠️避免报错:
- 文件路径 没有写绝对路径默认是处理python代码所在路径的文件,因此需要把代码文件放到这个处理的文件同一文件夹里。
(1)安装 selenium、webdriver-manager模块
💻 代码:在命令行终端执行
# 安装必要库(命令行执行)
pip install selenium==4.1.0 webdriver-manager==3.5.3

三.高级版-多套课程视频自动播放
⚠️避免报错:
- 文件路径 没有写绝对路径默认是处理python代码所在路径的文件,因此需要把代码文件放到这个处理的文件同一文件夹里。
💻 代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import random
import time
class AdvancedVideoBot:
def __init__(self):
self.driver = self._init_browser()
self.wait = WebDriverWait(self.driver, 20)
def _init_browser(self):
# 防检测浏览器配置
options = webdriver.EdgeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("--start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
return webdriver.Edge(options=options)
def _human_interaction(self):
"""模拟人类交互行为"""
# 随机滚动
self.driver.execute_script(f"window.scrollBy(0, {random.randint(200, 800)})")
# 鼠标随机移动
ActionChains(self.driver).move_by_offset(
random.randint(-50, 50),
random.randint(-50, 50)
).perform()
time.sleep(random.uniform(0.5, 1.5))
def _find_real_videos(self):
"""精准定位视频元素的三种方法"""
# 方法1:通过video标签
video_tags = self.driver.find_elements(By.TAG_NAME, 'video')
# 方法2:通过通用播放器class
player_divs = self.driver.find_elements(By.CSS_SELECTOR, '.video-player, .player-container')
# 方法3:通过aria-label属性
aria_elements = self.driver.find_elements(By.CSS_SELECTOR, '[aria-label*="video" i], [aria-label*="播放" i]')
# 合并去重
all_elements = list({elem for group in [video_tags, player_divs, aria_elements] for elem in group})
print(f"🔍 发现潜在视频元素 {len(all_elements)} 个")
return all_elements
def _smart_play(self, element):
"""智能播放策略"""
try:
# 先尝试点击播放按钮
play_btn = element.find_element(By.CSS_SELECTOR, '.play-button, .vjs-play-control')
self.driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", play_btn)
play_btn.click()
print("✅ 通过播放按钮启动")
except:
# 直接调用play() API
self.driver.execute_script("arguments[0].play()", element)
print("✅ 通过API强制播放")
# 双重验证播放状态
is_playing = self.driver.execute_script("""
return !arguments[0].paused &&
arguments[0].readyState > 2 &&
arguments[0].currentTime > 0
""", element)
return is_playing
def process_course(self, url):
self.driver.get(url)
# 处理iframe嵌套的情况
for _ in range(3): # 最多尝试3层iframe
try:
iframe = self.wait.until(EC.presence_of_element_located((By.TAG_NAME, 'iframe')))
self.driver.switch_to.frame(iframe)
print("🔄 切换到iframe层")
except:
break
# 动态加载检测(滚动加载)
last_count = 0
for _ in range(3): # 最多滚动3次
self._human_interaction()
current_count = len(self._find_real_videos())
if current_count == last_count:
break
last_count = current_count
# 精准识别视频元素
valid_videos = []
for elem in self._find_real_videos():
if elem.size['width'] > 100 and elem.size['height'] > 100: # 过滤装饰性小元素
valid_videos.append(elem)
print(f"🎯 确认有效视频 {len(valid_videos)} 个")
# 逐个处理视频
for idx, video in enumerate(valid_videos, 1):
print(f"\n📺 正在处理第 {idx} 个视频")
for retry in range(3):
if self._smart_play(video):
# 智能等待(根据视频时长)
duration = self.driver.execute_script("return arguments[0].duration", video)
wait_time = min(3600, int(duration * 0.8)) # 观看80%内容
print(f"⏳ 预计观看 {wait_time} 秒")
time.sleep(wait_time)
break
else:
print(f"⚠ 第{retry + 1}次播放尝试失败")
def run(self, course_urls):
try:
# 手动登录阶段
self.driver.get("https://le.ouchn.cn/")
input("请手动登录后按回车继续...")
# 批量处理课程
for url in course_urls:
print(f"\n🔗 开始处理课程:{url}")
self.process_course(url)
finally:
self.driver.quit()
if __name__ == "__main__":
bot = AdvancedVideoBot()
courses = [
"https://le.ouchn.cn/courseDetails/CSMC0000012933",
"https://le.ouchn.cn/courseDetails/8c885054-1ef3-11ee-bd5f-fa163ea9b0ea/SQJY4476207084651"
]
bot.run(courses)
如图:

⏰提示:一种需求可以有多种类型代码实现,实际中,我们可以从中选择,最适合的。
更多高级版下期更新

被折叠的 条评论
为什么被折叠?



