QWebEnginePage有linkHovered为啥没有linkClick?
时间: 2023-08-15 22:06:26 浏览: 73
在Qt的WebEngine模块中,确实没有提供类似于`linkClick`的信号或者函数来捕获网页中链接的点击事件。
但是,我们可以通过以下两种方式来实现捕获链接点击事件的功能:
1. 重载`acceptNavigationRequest`函数
我们可以在重载`acceptNavigationRequest`函数时,通过判断导航类型`NavigationTypeLinkClicked`来判断是否为链接点击事件,并在函数内进行处理。
下面是示例代码:
```python
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage
class MyWebEnginePage(QWebEnginePage):
def acceptNavigationRequest(self, url, _type, isMainFrame):
if _type == QWebEnginePage.NavigationTypeLinkClicked:
print("Link clicked:", url)
return False
return super().acceptNavigationRequest(url, _type, isMainFrame)
app = QApplication([])
view = QWebEngineView()
page = MyWebEnginePage(view)
view.setPage(page)
view.load(QUrl("https://www.google.com"))
view.show()
app.exec_()
```
2. 通过JavaScript代码来实现
我们可以通过在网页中注入JavaScript代码,来捕获链接的点击事件并调用JavaScript函数,然后通过`QWebEngineView`提供的`runJavaScript`函数来执行JavaScript函数并获取返回结果。
下面是示例代码:
```python
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage
class MyWebEnginePage(QWebEnginePage):
def javaScriptConsoleMessage(self, level, message, lineNumber, sourceID):
if level == QWebEnginePage.InfoMessageLevel and message.startswith("Link clicked:"):
url = message.split("Link clicked:")[1].strip()
print("Link clicked:", url)
app = QApplication([])
view = QWebEngineView()
page = MyWebEnginePage(view)
view.setPage(page)
view.load(QUrl("https://www.google.com"))
script = """
window.onclick = function(event) {
if (event.target.tagName.toLowerCase() == "a") {
console.info("Link clicked: " + event.target.href);
return false;
}
};
"""
view.page().runJavaScript(script)
view.show()
app.exec_()
```
在这个代码中,我们重载了`javaScriptConsoleMessage`函数,当JavaScript代码在网页中调用`console.info()`函数输出信息时,该函数会被调用,并在函数内进行处理。
然后我们注入了一个JavaScript代码,通过在`window.onclick`函数中判断是否为链接点击事件,并调用`console.info()`函数输出信息。
最后,我们通过`QWebEngineView`提供的`runJavaScript`函数来执行这个JavaScript代码。当你运行这个代码后,在QWebEngineView中点击任何一个链接时,都会触发`javaScriptConsoleMessage`函数,并将a标签的url打印出来。
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![crx](https://img-home.csdnimg.cn/images/20250102104920.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)