python - 如何获取在 QWebEnginePage 中点击的媒体的 URL,以及页面上的所有其他媒体链接
问题描述
我不能用专有的编解码器编译我自己的 Qt,更不用说从这个 Qt 版本编译 PyQt5,所以我有一个解决方法的想法,以便能够在我的浏览器上显示这些类型的媒体文件,即 h.264(我假设我仍然需要获得许可证等)。我想到的是将网页上的所有媒体链接都获取,并将它们放入一个QMediaPlaylist
,然后在网页上单击时选择正确的视频。
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import *
import sys
class Player(QMainWindow):
def __init__(self,parent=None,*args,**kwargs):
QMainWindow.__init__(self,parent,*args,**kwargs)
self._player = QMediaPlayer(self)
self._player.setAudioRole(QAudio.VideoRole)
self._playlist = QMediaPlaylist()
self._playlist.addMedia(QMediaContent(QUrl("http://techslides.com/demos/sample-videos/small.mp4")))
self._player.setPlaylist(self._playlist)
self._videoWidget = VideoWidget(self)
self._player.setVideoOutput(self._videoWidget)
self._playlist.setCurrentIndex(0)
self._player.play()
self.setCentralWidget(self._videoWidget)
self.showMaximized()
class VideoWidget(QVideoWidget):
def __init__(self,parent,*args,**kwargs):
QVideoWidget.__init__(self,parent,*args,**kwargs)
def keyPressEvent(self,event):
if event.key() == Qt.Key_Escape and self.isFullScreen():
self.setFullScreen(False)
event.accept()
elif event.key() == Qt.Key_Enter and event.modifiers() == Qt.Key_Alt:
self.setFullScreen(not self.isFullScreen())
event.accept()
else:
super().keyPressEvent(event)
def mouseDoubleClickEvent(event):
self.setFullScreen(not self.isFullScreen())
event.accept()
def exceptHook(self,e,v,t):
sys.__excepthook__(e,v,t)
sys.excepthook = exceptHook
app = QApplication(sys.argv)
mainWindow = Player()
app.exec_()
在此示例中,媒体播放列表中只有一个 .mp4 链接用于测试,而对于我的浏览器,我希望能够添加网页所有媒体文件的 URL。当在网页上点击视频时,我希望能够在播放列表中定位到 URL,切换到相应的索引,然后将视频小部件覆盖到网页上,然后播放。我不知道如何:
- 获取网页的所有媒体链接(并非全部被拦截,
QWebEngineUrlRequestInterceptor
因为一些链接存储在大型机网站的html代码中的标签中) - 获取点击媒体的 URL(可能需要某种信号或事件?)
- 获取页面上视频的坐标位置(并更新它以进行滚动等)
我已经尝试使用triggerAction
并拦截事件,但是没有任何操作可以让我获取点击的视频 URL。我想我可以使用 获取网页 html .toHtml(callback)
,并且可以通过使用 过滤从那里获取链接beautifulSoup4
,但是根据.toHtml
我的经验,调用速度很慢。我假设我可以运行一些 Javascript 来获取视频的坐标位置(可能还有链接),但我没有使用 Javascript 的经验。
解决方案
推荐阅读
- python - ModuleNotFoundError:没有名为“ruamel”的模块
- ruby-on-rails - 这个数据库关系模式是否正确?
- r - 从 R 包加载数据集并不总是有效
- php - mongodb php更新上的arrayFilters
- php - return 和 echo 在同一个函数中
- python - 在冒号之前使用第一行单词来创建列标题并从行中删除第一行和所有剩余行
- php - 使用 Laravel 和 nginx 和 docker-compose 找不到图像
- aws-lambda - 无服务器 - 在 Lambda 函数中运行 Express 实例,好还是坏?
- javascript - Javascript\Jquery 鼠标光标 - 悬停项目时不一致
- java - Spring Batch:如何使用 FlatFileItemReader 读取 CSV 文件的页脚和验证