Selenuim与QT(+web驱动程序):如何从QStandardItemModel/QTableVi读取数据

2024-09-27 09:33:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Selenium用python编写自动化代码,并从QT中的QTableView中提取数据,该视图使用QStandarItemModel填充,我一生都找不到数据。我甚至看不到模型本身。我正在使用QtWeb驱动程序(我们的一位开发人员用它包装了我们的代码)。我已经搜索了一段时间,但找不到任何与此问题相关的内容

模型是这样创建的(在C++中)(出于隐私目的删除了一些元素):

std::vector<int> vec{1,2,3};
//model is member
model = new QStandardItemModel(vec.size(), 3, this);
model->setHorizontalHeaderLabels(
        {Qstring::fromStdString("header1"), Qstring::fromStdString("header2"), Qstring::fromStdString("header3")});

for (int row = 0; row < vec.size(); ++row) {
    for (int col = 0; col < 3; ++col) {
        QModelIndex index = m_model->index(row, col, QModelIndex());
        m_model->setData(index, vec[row]);
    }
}
ui->tableView->setModel(model);
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tableView->resizeColumnsToContents();
ui->tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
ui->tableView->show();

当我从驱动程序中复制页面源时(同样,出于隐私考虑删除了一些元素):

<MainWindow id="MainWindow" name="generic name" elementId="3aa46937bdbb3f42a0cd8d0187cb654c" className="MainWindow">
<QWidget id="centralWidget" elementId="65c5cd0d7e8d8bc35c67cb6c81936ca2" className="QWidget">
    <QStackedWidget id="stackedWidget" elementId="4a6ac7e7d7ca5de9b4aa3ca2a3db766e" className="QStackedWidget">
                <QWidget id="listUnspent" elementId="5ef05bc4889f20fce8b431de39ddf95a" className="QWidget">
                    <QTableView id="tableView" elementId="767406a3514ef2e9c627ab495a585365" className="QTableView">
                        <QWidget id="qt_scrollarea_viewport" elementId="5254d690f8bfd8fe4e7086ed8db6e8ef" className="QWidget"/>
                        <QWidget id="qt_scrollarea_hcontainer" elementId="4d8a1f4a1edbfb3ab497165454c78938" className="QWidget">
                            <QScrollBar elementId="c8b64d817fb67f90d389b99638548b74" className="QScrollBar"/>
                        </QWidget>
                        <QWidget id="qt_scrollarea_vcontainer" elementId="a98aabc93e535a20dc15d7b12fa9ac0e" className="QWidget">
                            <QScrollBar elementId="c371584b9cc4e290ae6cabc19055915e" className="QScrollBar"/>
                        </QWidget>
                        <QHeaderView elementId="44eb6bbf3fd64602bf372dd88d075a1b" className="QHeaderView">
                            <QWidget id="qt_scrollarea_viewport" elementId="ed762bb1497295b05d5c072ee8b5fd7d" className="QWidget"/>
                            <QWidget id="qt_scrollarea_hcontainer" elementId="b03b6edf0cb8ac33fb9818f721908e38" className="QWidget">
                                <QScrollBar elementId="217023db613ff7062ed6b0b657ac276f" className="QScrollBar"/>
                            </QWidget>
                            <QWidget id="qt_scrollarea_vcontainer" elementId="28bd1488db038f7a9538869d7c4f5f86" className="QWidget">
                                <QScrollBar elementId="c317ee4f4eb42471f37f7535e4336523" className="QScrollBar"/>
                            </QWidget>
                        </QHeaderView>
                        <QHeaderView elementId="d59b5ad281b15bb2e866eb63c6703ef1" className="QHeaderView">
                            <QWidget id="qt_scrollarea_viewport" elementId="ebedd059f090fbfada4e6530596df2a3" className="QWidget"/>
                            <QWidget id="qt_scrollarea_hcontainer" elementId="026fb1c1c160d8f0c7c5edb661c8cff9" className="QWidget">
                                <QScrollBar elementId="1814f022f612464453cf3f17f07dff57" className="QScrollBar"/>
                            </QWidget>
                            <QWidget id="qt_scrollarea_vcontainer" elementId="a28808530e7696fb0169b167a75cee54" className="QWidget">
                                <QScrollBar elementId="1eea61f6c330bc555e1307ecbe044413" className="QScrollBar"/>
                            </QWidget>
                        </QHeaderView>
                        <QTableCornerButton elementId="47baa81d6b2ca136ac12c4b00c1748f6" className="QTableCornerButton"/>
                    </QTableView>
                </QWidget>
    </QStackedWidget>
</QWidget>

很容易看出,表中没有实际数据的痕迹。 在编写自动化时,我可以看到QTableView使用(在python中)

element = self.driver.find_elements_by_xpath(
            "//QTableView"))

尝试以下方法也不起作用:

element.text
element.get_attribute("value")
element.get_attribute("title")
self.driver.execute_script("return jQuery(arguments[0]).val();", element)

我对这种方法不太乐观,因为它试图在页面源中搜索数据,而页面源显然不在那里

我的问题是:如何用QStandardItemModel填充数据?我是说,它一定在某个地方,对吧?它出现在屏幕上。有没有办法读懂它

提前非常感谢


Tags: 数据iduimodelelementqtrowclassname

热门问题