使用Selenium Web Driver无法自动化视频div的video/object标签,求解决方案
针对视频Object标签的Web自动化解决方案
1. Selenium的操作思路
- 直接定位Object标签本身:如果标签没有可识别的子元素,用
find_element(By.TAG_NAME, "object")定位后,借助ActionChains模拟键盘快捷键(比如空格控制播放/暂停),或者模拟鼠标点击标签区域的坐标:from selenium.webdriver.common.action_chains import ActionChains obj_element = driver.find_element(By.TAG_NAME, "object") # 点击标签中心位置 ActionChains(driver).move_to_element(obj_element).click().perform() - 若视频是Flash类插件内容,WebDriver无法穿透到插件内部,可结合桌面自动化工具(如AutoIt、PyAutoGUI),先通过Selenium获取标签的屏幕坐标,再模拟点击:
import pyautogui obj_element = driver.find_element(By.TAG_NAME, "object") # 计算元素在屏幕上的绝对坐标 screen_x = driver.execute_script("return arguments[0].getBoundingClientRect().left + window.scrollX;", obj_element) screen_y = driver.execute_script("return arguments[0].getBoundingClientRect().top + window.scrollY;", obj_element) # 点击视频区域内的任意点 pyautogui.click(screen_x + 50, screen_y + 50)
2. 第三方库替代方案
- Playwright:对现代浏览器支持更灵活,可直接执行JS脚本尝试调用视频的控制接口(如果页面暴露相关API):
也能像Selenium一样定位Object标签后模拟鼠标、键盘交互,稳定性优于旧版Selenium。page.evaluate("""() => { const videoEmbed = document.querySelector('object embed'); if (videoEmbed) videoEmbed.play(); }""")
3. 特殊场景处理
如果Object标签加载的是完全封闭的插件内容,没有暴露任何Web层面的控制接口,只能依赖桌面级自动化工具模拟物理操作,或者检查页面是否有配套的控制按钮(比如外部的播放/暂停按钮),优先定位这些按钮进行操作。
内容的提问来源于stack exchange,提问作者Prashant
相关产品推荐
相关产品推荐

