You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium获取网站视频链接的方法及问题求助——针对https://www.ofw.su/family-feud-july-29-2022站点

解决Selenium无法获取视频链接的问题,附通用获取方法

首先,你的代码拿不到视频链接,大概率是这几个原因在搞鬼:

  • 绝对XPath /html/body/div/div[2]/div[3]/video 太脆弱了,页面结构稍有变动就会失效
  • 固定的time.sleep(2)可能不够,视频元素还没加载完成你就去查找了
  • 视频可能是通过JavaScript动态注入的,初始状态下src属性是空的,或者链接被存在其他属性里(比如data-src)
  • 视频说不定嵌套在iframe中,你直接查找自然找不到元素

第一步:修改元素定位与等待逻辑

先把绝对XPath换成更稳定的相对定位,同时用显式等待代替固定sleep,确保元素加载完成后再操作:

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

def get_video_link(link):
    CHROMEDRIVER_PATH = 'chromedriver.exe'
    options = webdriver.ChromeOptions()
    options.add_argument("user-data-dir=E:\\profile")
    options.add_argument("--disable-notifications")
    options.add_experimental_option('excludeSwitches', ['enable-logging'])
    
    driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=options)
    driver.get(link)
    
    try:
        # 显式等待视频元素加载,最长等待10秒
        video_element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.TAG_NAME, "video"))
        )
        
        # 先尝试获取src,如果为空,再检查data-src等常见存储链接的属性
        video_url = video_element.get_attribute('src')
        if not video_url:
            video_url = video_element.get_attribute('data-src')
        if not video_url:
            video_url = video_element.get_attribute('data-video')
        
        print("视频链接:", video_url)
        return video_url
    except Exception as e:
        print("获取视频链接失败:", str(e))
        return None
    finally:
        driver.quit()

link = "https://www.ofw.su/family-feud-july-29-2022"
get_video_link(link)

第二步:检查是否存在iframe嵌套

如果上面的代码还是找不到视频,打开浏览器开发者工具(F12),看看视频元素是不是被包裹在<iframe>标签里。如果是,得先切换到iframe才能查找:

# 在获取video元素之前,先切换到iframe
# 这里可以根据实际情况用id、class等定位iframe,示例用标签名
iframe = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.TAG_NAME, "iframe"))
)
driver.switch_to.frame(iframe)

# 之后再查找video元素
video_element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.TAG_NAME, "video"))
)

通用获取视频链接的步骤

用Selenium爬取网站视频链接,通常遵循以下流程:

  1. 先查页面结构:用开发者工具确认视频元素的位置,是否在iframe中,以及真实链接存在哪个属性里(src/data-src等)
  2. 用显式等待代替固定sleep:永远优先用WebDriverWait,避免元素未加载完成导致的定位失败
  3. 处理动态加载的情况:有些视频需要点击播放按钮才会加载真实链接,这时候要先模拟点击:
    play_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CLASS_NAME, "play-btn"))
    )
    play_button.click()
    # 给一点时间让视频链接加载
    time.sleep(1)
    video_url = video_element.get_attribute('src')
    
  4. 查网络请求兜底:如果Selenium始终拿不到,打开浏览器网络面板,筛选Media类型,找到视频的请求URL,直接用requests库请求(记得带上正确的请求头,比如Referer、User-Agent,避免被防盗链拦截)

内容的提问来源于stack exchange,提问作者Phan Trọng Phúc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 20:47:40