简体   繁体   中英

Python Selenium: Obtain row and column of an element in a table

I have a table that contains lots of diferent elements. I want to first look for specific ones (the structure below shows the row of the element 220193) Basically I want to find the element with href 220193 on this big table and then gather all the values that are on the same row than this element. Then repeat this for other elements 220XYZ.

I was thinking of finding element 220193 by link and then gathering the xpath to find position (row and column) in the table and then iterate on the different columns but i can't manage it to work.

 <tr role="row" aria-rowindex="1" class="table-warning"> <td role="cell" aria-colindex="1" class="table-warning b-table-sticky-column"><a href="**">220193</a></td>** <td aria-colindex="2" role="cell" class="">Unknown</td> <td aria-colindex="3" role="cell" class="">XXXXXX</td> <td aria-colindex="4" role="cell" class="">2022-06-30</td> <td aria-colindex="5" role="cell" class="">2022-07-01</td> <td aria-colindex="6" role="cell" class="">XXXXXX</td> <td aria-colindex="7" role="cell" class="table-info">1209</td> <td aria-colindex="8" role="cell" class="table-info">760</td> <td aria-colindex="9" role="cell" class="table-info">449</td> <td aria-colindex="10" role="cell" class="table-info">37.1%</td> <td aria-colindex="11" role="cell" class=""><button type="button" class="btn mr-2 btn-secondary btn-sm"> Open Report </button></td> <td aria-colindex="12" role="cell" class="">16</td> <td aria-colindex="13" role="cell" class="">1176</td> <td aria-colindex="14" role="cell" class="">18</td> <td aria-colindex="15" role="cell" class="">1.5%</td> <td aria-colindex="16" role="cell" class="">2</td> <td aria-colindex="17" role="cell" class="">1174</td> <td aria-colindex="18" role="cell" class="">0</td> <td aria-colindex="19" role="cell" class="">0.0%</td> <td aria-colindex="20" role="cell" class="">0</td> <td aria-colindex="21" role="cell" class="">1166</td> <td aria-colindex="22" role="cell" class="">8</td> <td aria-colindex="23" role="cell" class="">0.7%</td> <td aria-colindex="24" role="cell" class="">14</td> <td aria-colindex="25" role="cell" class="">1152</td> <td aria-colindex="26" role="cell" class="">0</td> <td aria-colindex="27" role="cell" class="">0.0%</td> <td aria-colindex="28" role="cell" class="">0</td> <td aria-colindex="29" role="cell" class="">1146</td> <td aria-colindex="30" role="cell" class="">6</td> <td aria-colindex="31" role="cell" class="">0.5%</td> <td aria-colindex="32" role="cell" class="">265</td> <td aria-colindex="33" role="cell" class="">876</td> <td aria-colindex="34" role="cell" class="">5</td> <td aria-colindex="35" role="cell" class="">0.4%</td> <td aria-colindex="36" role="cell" class="">10</td> <td aria-colindex="37" role="cell" class="">768</td> <td aria-colindex="38" role="cell" class="">98</td> <td aria-colindex="39" role="cell" class="">8.1%</td> <td aria-colindex="40" role="cell" class="">1</td> <td aria-colindex="41" role="cell" class="">767</td> <td aria-colindex="42" role="cell" class="">0</td> <td aria-colindex="43" role="cell" class="">0.0%</td> <td aria-colindex="44" role="cell" class="">4</td> <td aria-colindex="45" role="cell" class="">759</td> <td aria-colindex="46" role="cell" class="">4</td> <td aria-colindex="47" role="cell" class="">0.3%</td> <td aria-colindex="48" role="cell" class="">0</td> <td aria-colindex="49" role="cell" class="">759</td> <td aria-colindex="50" role="cell" class="">0</td> <td aria-colindex="51" role="cell" class="">0.0%</td> <td aria-colindex="52" role="cell" class="table-info">58</td> <td aria-colindex="53" role="cell" class="table-info">393</td> </tr>

This may work.

  1. Find all tr
  2. For loop find all td in each tr
  3. If first td's text is 220193, store all tds' text in res
keys = ['220193', '220XYZ']
res = []
for k in keys:
    rows = driver.find_elements(By.CSS_SELECTOR, 'tr')
    for r in rows:
        tds = driver.find_elements(By.CSS_SELECTOR, 'td')
        if tds[0] = k:
            res.append([td.text for td in tds])

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM