根据第 1 列中的值,在具有 XPATH 的网格中选择第 2 列中的特定值

问题描述 投票:0回答:1

我正在 Python 中使用 selenium,使用我的组织的特定网站来自动跟踪活动的出席情况。与会者列表以网格形式构建,第 1 列包含与会者姓名,第 2 列包含复选框。

我的 Python 代码的想法是在第 1 列中寻找特定名称,然后选中第 2 列中的框。

网格的结构如下:

<div id="grid" style="padding: 1em; display: grid; grid-template-columns: repeat(3, minmax(auto, 20em)); gap: 10px; align-items: center">
    <div style="grid-column: 1">
        "name1"                                        
    </div>
    <div style="width: 25px; grid-column: 2">
        <div class="cbx-container">
            <div class="cbx cbx-md cbx-active" tabindex="1000">
                <span class="cbx-icon"></span>
            </div>
            <input type="text" id="u1b7be9100c2-evforodn5xad-attended" class="check-all-item-1" name="attended-1" value="0" data-krajee-checkboxx="checkboxX_4d99482d" style="display: none;">
        </div>                                        
    </div>
    <div style="grid-column: 1">
        "name2"                                        
    </div>
    <div style="width: 25px; grid-column: 2">
        <div class="cbx-container">
            <div class="cbx cbx-md cbx-active" tabindex="1000">
                <span class="cbx-icon"></span>
            </div>
            <input type="text" id="u17528d00c2-evforodn5xad-attended" class="check-all-item-1" name="attended-1" value="0" data-krajee-checkboxx="checkboxX_4d99482d" style="display: none;">
        </div>                                        
    </div>                                                                                                          </div>

在上面的示例中,我有 2 行。在第一行中,第 1 列中的“name1”,第 2 列中的复选框。在第二行中,第 1 列中的“name2”,第 2 列中的复选框。真实数据集有更多行。

选择“name2”复选框的 XPATH 语法是什么?

不幸的是,我无法完成此任务,因为我只是从 XPATH 开始。到目前为止,我只能使用以下方式选择名称:

"//div[contains(text(),'name2')]"
python selenium-webdriver xpath css-grid
1个回答
0
投票

您所提议的 XPath 走在正确的轨道上...您只需要多一步,

following::
,例如

//div[contains(text(),'name1')]//following::input

由于您使用的是 python,因此您可以将所需的名称分配给变量,

name
,然后在 XPath 中使用它,例如

name = "name1"
driver.find_element(By.XPATH, f"//div[contains(text(),'{name}')]//following::input")
© www.soinside.com 2019 - 2024. All rights reserved.