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

Selenium中get_attribute()获取video的src返回空字符串问题

问题与解决方案

问题详情

需要从网页https://mplayer.me/default.php?id=MTc3ODc3的指定video标签中提取src属性,检查元素时可见该属性(Safari中对应的XPath为//*[@id="player"]/div[2]/div[4]/video),但使用Selenium调用get_attribute("src")返回空字符串,.text同样无效。由于Chrome会返回blob格式的链接,无法获取真实的播放地址(如https://wwwx18.gogocdn.stream/videos/hls/6CjH7KUeu18L4Y7ls0ohCw/1668685924/177877/81aa0af3891f4ef11da3f67f0d43ade6/ep.1.1657688313.m3u8),因此必须使用Safari浏览器。

原代码:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import os
os.environ["SELENIUM_SERVER_JAR"] = "selenium-server-standalone-2.41.0.jar"
browser = webdriver.Safari()
browser.get("https://mplayer.me/default.php?id=MTc3ODc3")
print(WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.TAG_NAME,"video"))).get_attribute("src"))
browser.quit()

原因分析

  1. 定位不准确:使用By.TAG_NAME定位video元素,可能匹配到页面中其他无src属性的video标签,导致获取的不是目标元素。
  2. 动态属性读取限制:部分网站通过JavaScript动态设置video的src属性,Selenium的get_attribute方法在某些场景下只能读取元素的初始属性值(为空),无法获取动态更新后的真实值。

修改后的代码

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import os

os.environ["SELENIUM_SERVER_JAR"] = "selenium-server-standalone-2.41.0.jar"
browser = webdriver.Safari()
browser.get("https://mplayer.me/default.php?id=MTc3ODc3")

# 用精确XPath定位目标video元素,确保选中正确标签
target_video = WebDriverWait(browser, 20).until(
    EC.visibility_of_element_located((By.XPATH, '//*[@id="player"]/div[2]/div[4]/video'))
)

# 两种方式尝试获取src:直接调用get_attribute + 通过JavaScript读取DOM属性
src_direct = target_video.get_attribute("src")
src_via_js = browser.execute_script('return arguments[0].src;', target_video)

print("直接获取的src:", src_direct)
print("通过JS获取的src:", src_via_js)

browser.quit()

关键说明

  • 精确定位:使用你在Safari中确认的XPath定位元素,避免误选其他video标签。
  • JavaScript读取:对于动态加载的属性,通过execute_script直接读取DOM元素的src属性,通常能获取到动态更新后的真实值,解决get_attribute返回空的问题。

内容的提问来源于stack exchange,提问作者BlueGreenWhyteRed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:35:35