pyqt5获取html,PyQt5 + QtWebEngine获取html元素?(PyQt5 + QtWebEngine get html element?)

本文介绍了将项目从Qt WebKit迁移到Qt WebEngine时,如何使用PyQt5+QtWebEngine获取HTML元素。通过JavaScript运行DOM操作来获取元素,由于Qt WebEngine中不存在QWebElement的等价物,所有DOM操作必须在JavaScript中完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PyQt5 + QtWebEngine获取html元素?(PyQt5 + QtWebEngine get html element?)

大家! 我想将我的项目从Qt WebKit移植到Qt WebEngine! 目前我想获得html elemnt。

我使用PyQt5 + QT 5.8。

我的功能:

def get_elment(self,selector,func):

js = '''

function r()

{

var button = document.querySelector("%s");

return button;

}

r();

'''%selector

self.wp.runJavaScript(js,func)

我用它 :

def print_element(e):

print "e:%s"%e

browser.get_elment('#u1 > a:nth-child(1)',print_element)

我希望e应该是一个html元素,但它是一个字典。 结果:

gXmTd.png

我在网上搜索,但找不到解决方案。 谁能帮我 ? 非常感谢!

everyone! I want port my project from Qt WebKit to Qt WebEngine! Cur

### 铁路轨道障碍物检测项目的实现 要使用 Python、YOLOv5PyQt5 实现铁路轨道障碍物检测项目,可以按照以下方法设计并开发完整的解决方案。此方案涵盖了数据集准备、模型训练、推理部署以及图形界面的设计。 --- #### 1. 数据集准备 为了训练 YOLOv5 模型用于铁路轨道障碍物检测,需要准备好标注好的数据集。假设已有类似于引用中的道路坑洞和裂纹的数据集结构[^1],则需将其转换为适合 YOLO 的格式: - **数据集划分**: 将数据划分为训练集、验证集和测试集。 - **标签格式转换**: 如果原始标注文件为 VOC XML 格式,则需要将其转换为 YOLO 支持的 `.txt` 文件格式。每行表示一个目标框,格式如下: ``` <class_id> <x_center> <y_center> <width> <height> ``` 可以编写脚本完成这一过程。例如: ```python import xml.etree.ElementTree as ET from pathlib import Path def convert_voc_to_yolo(xml_file, output_dir): tree = ET.parse(xml_file) root = tree.getroot() image_width = int(root.find('size/width').text) image_height = int(root.find('size/height').text) with open(output_dir / (xml_file.stem + '.txt'), 'w') as f: for obj in root.findall('object'): class_name = obj.find('name').text bbox = obj.find('bndbox') xmin = float(bbox.find('xmin').text) xmax = float(bbox.find('xmax').text) ymin = float(bbox.find('ymin').text) ymax = float(bbox.find('ymax').text) x_center = ((xmin + xmax) / 2) / image_width y_center = ((ymin + ymax) / 2) / image_height width = (xmax - xmin) / image_width height = (ymax - ymin) / image_height f.write(f"{class_dict[class_name]} {x_center} {y_center} {width} {height}\n") # 假设类别字典已定义好 class_dict = {'obstacle': 0} ``` --- #### 2. 训练 YOLOv5 模型 安装 YOLOv5 并配置环境后,可以通过命令行或自定义脚本启动训练流程。以下是基本步骤: - 下载预训练权重(如 `yolov5s.pt`),或者从头开始训练。 - 编写 YAML 文件描述数据集路径和类别信息: ```yaml train: ./data/train/images/ val: ./data/val/images/ nc: 1 # 类别数量 names: ['obstacle'] # 类别名称列表 ``` - 使用以下命令启动训练: ```bash python train.py --img 640 --batch 16 --epochs 50 --data data.yaml --weights yolov5s.pt --cache ``` 训练完成后会生成最优权重文件(`.pt`)供后续推理使用。 --- #### 3. 推理模块集成 利用训练好的模型,在 PyQt5 图形界面上实现实时推理功能。具体逻辑包括加载模型、读取摄像头帧或图片输入,并显示预测结果。 ##### 加载模型 ```python import torch from models.experimental import attempt_load def load_model(weights_path='best.pt', device='cuda' if torch.cuda.is_available() else 'cpu'): model = attempt_load(weights_path, map_location=device) model.eval() return model ``` ##### 单张图像推理 ```python from utils.general import non_max_suppression, scale_coords from PIL import ImageDraw def detect_obstacles(model, img, conf_thres=0.4, iou_thres=0.5): results = [] # 转换到 PyTorch 张量 img_tensor = preprocess_image(img).unsqueeze(0).to(device) # 进行推理 pred = model(img_tensor)[0] det = non_max_suppression(pred, conf_thres, iou_thres)[0] if det is not None and len(det): det[:, :4] = scale_coords(img_tensor.shape[2:], det[:, :4], img.size[::-1]).round() draw = ImageDraw.Draw(img) for *xyxy, conf, cls in reversed(det): label = f'{conf:.2f}' draw.rectangle(xyxy, outline=(255, 0, 0), width=2) draw.text((int(xyxy[0]), int(xyxy[1]) - 10), label, fill=(255, 0, 0)) return img ``` --- #### 4. PyQt5 GUI 设计 创建一个简单的窗口应用程序来展示实时检测效果。主要组件包括按钮触发推理操作、画布区域显示结果等。 ##### 主窗体布局 ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget from PyQt5.QtGui import QPixmap from PIL.ImageQt import ImageQt class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Railway Obstacle Detection") layout = QVBoxLayout() self.label = QLabel(self) self.button = QPushButton("Detect", self) self.button.clicked.connect(self.on_button_click) widget = QWidget() widget.setLayout(layout) self.setCentralWidget(widget) layout.addWidget(self.label) layout.addWidget(self.button) def on_button_click(self): input_img = ... # 获取输入图像 result_img = detect_obstacles(model, input_img) qt_img = ImageQt(result_img.convert("RGB")) pixmap = QPixmap.fromImage(qt_img) self.label.setPixmap(pixmap.scaledToWidth(800)) if __name__ == "__main__": app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` --- #### 性能优化建议 如果希望进一步提升性能,可以选择更高效的版本如 YOLOv8 或者调整超参数[^3]。对于 GPU 用户而言,确保显卡驱动程序兼容 CUDA 版本能够显著加速计算效率。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值