如何在自动生成主标识符时使用selenium访问文本字段

mob*_*cdi 7 python-3.x selenium-webdriver

我有一个HTML表格,每行输出一些数据,每行包含一个文本字段.我有一个单独的数据框,其中包含我需要输入到相关行的值,但我无法弄清楚如何获取正确的文本输入元素,因为名称不是唯一的.

我可以得到包含的元素,123456/1所以我可以找到包含我想要的PartA的行,但我无法弄清楚如何获取文本输入字段id ="VALUE.ENTER.SYSTEM.1-XY然后对应于该行..XY是一个数值,它根据数据行的数量而变化,我不能假设XY的特定值对应于我想要查找的值.

我不知道该行的完整@value,并且页面上列出的值一次限制为50只因为我没有找到它一次并不意味着它不会出现在后面的页面上.我需要找到表中的第一行,从中提取一个值然后如果我在另一个数据帧中有匹配,如果我这样做,我想在行的末尾向文本框添加一个值,然后继续下一行并重复extract,compare,submit步骤,直至用完了行

任何可靠的方法来定位python中的文本输入字段

title ="EnterValueHere"

我的守则

for row in rows:
    RowData = row.find_elements_by_tag_name("input")
    for cell in RowData:
        #Get the ID in question
        if "/" in cell.get_attribute("value"):
            TextToSplit =cell.get_attribute("value")
            PartA,PartB= str(TextToSplit).split("/")
            print(PartA)
Run Code Online (Sandbox Code Playgroud)

样本表

  <tr>
                <td class="tablesaw-cell-persist">
                  <input type="hidden" name="UNIQUE_ID.SYSTEM.01" value="12">
                  <input type="hidden" name="HEADER_ID.SYSTEM.01" value="">
                  123456/1<input type="hidden" name="CODE.SYSTEM.01" value="123456/1">
                  <span id="ANCHOR.SYSTEM.01"></span>
                </td>
                <td class="tablesaw-cell-persist">
                  BLOGGS JOE<input type="hidden" name="NAME.SYSTEM.01" value="JOE BLOGGS">
                </td>
                <td class="tablesaw-cell-persist">
                  1<input type="hidden" name="ATTEMPT.SYSTEM.01" value="1">
                </td>

                <td>
                  <input type="hidden" name="PRODUCTID.DUM_ASSESSMENT.MENSYS.1-12" value="XY1234+1">
                  <input type="hidden" name="SUS_CODE.DUM_ASSESSMENT.MENSYS.1-12" value="">

                  <div class="sv-input-group-table"><div class="sv-input-group"><span class="sv-input-group-addon"><span class="mme-input-group">

                   N<input type="hidden" name="RTS_CODE.DUM_ASSESSMENT.MENSYS.1-12" value="N">
                  </span></span><input type="text" class="sv-form-control sv-form-control-xs" name="VALUE.ENTER.SYSTEM.1-12" id="VALUE.ENTER.SYSTEM.1-12" title="EnterValueHere" value=""></div></div>
                  <span class="fbk-input-group fbk-select"></span>
                </td>


</tr>
<tr>
                <td class="tablesaw-cell-persist">
                  <input type="hidden" name="UNIQUE_ID.SYSTEM.02" value="12">
                  <input type="hidden" name="HEADER_ID.SYSTEM.02" value="">
                  123456/1<input type="hidden" name="CODE.SYSTEM.02" value="234456/1">
                  <span id="ANCHOR.SYSTEM.02"></span>
                </td>
                <td class="tablesaw-cell-persist">
                  BLOGGS JOE<input type="hidden" name="NAME.SYSTEM.02" value="J BLOGGS">
                </td>
                <td class="tablesaw-cell-persist">
                  1<input type="hidden" name="ATTEMPT.SYSTEM.02" value="1">
                </td>

                <td>
                  <input type="hidden" name="PRODUCTID.DUM_ASSESSMENT.MENSYS.1-02" value="XY1234+2">
                  <input type="hidden" name="SUS_CODE.DUM_ASSESSMENT.MENSYS.1-02" value="">

                  <div class="sv-input-group-table"><div class="sv-input-group"><span class="sv-input-group-addon"><span class="mme-input-group">

                   N<input type="hidden" name="RTS_CODE.DUM_ASSESSMENT.MENSYS.1-02" value="N">
                  </span></span><input type="text" class="sv-form-control sv-form-control-xs" name="VALUE.ENTER.SYSTEM.1-02" id="VALUE.ENTER.SYSTEM.1-02" title="EnterValueHere" value=""></div></div>
                  <span class="fbk-input-group fbk-select"></span>
                </td>


 </tr>
 <tr>
                <td class="tablesaw-cell-persist">
                  <input type="hidden" name="UNIQUE_ID.SYSTEM.03" value="12">
                  <input type="hidden" name="HEADER_ID.SYSTEM.03" value="">
                  123456/1<input type="hidden" name="CODE.SYSTEM.03" value="56789/1">
                  <span id="ANCHOR.SYSTEM.02"></span>
                </td>
                <td class="tablesaw-cell-persist">
                  BLOGGS JOE<input type="hidden" name="NAME.SYSTEM.03" value="JM BLOGGS">
                </td>
                <td class="tablesaw-cell-persist">
                  1<input type="hidden" name="ATTEMPT.SYSTEM.03" value="1">
                </td>

                <td>
                  <input type="hidden" name="PRODUCTID.DUM_ASSESSMENT.MENSYS.1-03" value="XY1234+2">
                  <input type="hidden" name="SUS_CODE.DUM_ASSESSMENT.MENSYS.1-03" value="">

                  <div class="sv-input-group-table"><div class="sv-input-group"><span class="sv-input-group-addon"><span class="mme-input-group">

                   N<input type="hidden" name="RTS_CODE.DUM_ASSESSMENT.MENSYS.1-02" value="N">
                  </span></span><input type="text" class="sv-form-control sv-form-control-xs" name="VALUE.ENTER.SYSTEM.1-03" id="VALUE.ENTER.SYSTEM.1-03" title="EnterValueHere" value=""></div></div>
                  <span class="fbk-input-group fbk-select"></span>
                </td>


 </tr>
Run Code Online (Sandbox Code Playgroud)

Tar*_*ani 1

因此,首先您需要获取代码的 TR 123456/1。xpath 是

//tr[td//input[@name="CODE.SYSTEM.XY"][@value=123456/1]
Run Code Online (Sandbox Code Playgroud)

所以上面是获取tr包含您的input元素的元素。现在您希望输入位于此 tr 内,这可以通过将 XPath 扩展为

//tr[td//input[@name="CODE.SYSTEM.XY"][@value=123456/1]/td//input[@title='EnterValueHere']
Run Code Online (Sandbox Code Playgroud)

更新 1:2018 年 5 月 30 日

你应该使用

//tr[td//input[starts-with(@name, 'CODE.SYSTEM.')][starts-with(@value, '123456/')]/td//input[@title='EnterValueHere']
Run Code Online (Sandbox Code Playgroud)

第一部分表示在文​​档中的任何位置查找 tr,然后 [] 条件表示在任何位置都有一个元素 td 和子输入字段 hwre,其属性名称以 CODE... 开头,值以 12345/ 开头,一旦找到 tr 就找到另一个td 里面有一个标题为 Entervaluehere 的输入