python pyside2 内嵌Chromium浏览器,使用selenium控制
时间: 2023-07-26 13:37:27 浏览: 216
在 PySide2 中内嵌 Chromium 浏览器需要使用 QtWebEngineWidgets 模块,而使用 Selenium 控制浏览器则需要安装相应的浏览器驱动。以下是一个简单的示例代码:
```python
from PySide2.QtCore import QUrl
from PySide2.QtGui import QWindow
from PySide2.QtWidgets import QApplication
from PySide2.QtWebEngineWidgets import QWebEngineView
from selenium import webdriver
from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.chrome.options import Options
import sys
import time
class CustomWebEngineView(QWebEngineView):
def __init__(self):
super().__init__()
# 创建一个 Chrome 的 Options 对象
options = Options()
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--headless')
# 创建一个 Chrome 的 WebDriver 对象
self.driver: WebDriver = webdriver.Chrome(options=options)
# 加载页面
self.load(QUrl('https://www.baidu.com'))
def closeEvent(self, event):
# 关闭 WebDriver
self.driver.quit()
super().closeEvent(event)
if __name__ == '__main__':
app = QApplication(sys.argv)
# 创建一个窗口
window = QWindow()
# 创建一个内嵌的 WebEngineView
web_view = CustomWebEngineView()
web_view.setParent(window)
# 显示窗口
window.show()
# 进入事件循环
sys.exit(app.exec_())
```
在上面的示例代码中,首先我们自定义了一个 `CustomWebEngineView` 类,继承自 `QWebEngineView`,在该类的构造函数中创建了一个 Chrome 的 WebDriver 对象,并加载了一个百度首页的页面。
然后我们创建了一个窗口,并将 `CustomWebEngineView` 对象设置为该窗口的子控件。最后调用 `app.exec_()` 进入事件循环,显示窗口。在窗口关闭时,我们需要手动调用 `driver.quit()` 关闭 WebDriver。
需要注意的是,在使用 PySide2 内嵌 Chromium 浏览器时,由于 Chromium 的多进程架构,我们需要在启动 Chrome 的时候禁用 GPU 和沙盒模式。另外,为了避免浏览器窗口弹出,我们使用了 `--headless` 参数。
阅读全文