我在尝试从班级中选择数据时遇到问题。我需要做的是获取每个类的第三个TD(报告名称)(名为"奇数"或"偶数"),然后将其与python中的字符串变量进行比较(其中是提交报告的名称,例如"报告名称2(擦除)"),如果匹配,我需要获取第一个td的值。我只需要能够在第三个td中使用该报告名称获取该数字。有任何想法吗?我尝试了像
这样的CSS选择器driver.find_element_by_xpath("//table[contains(@class, 'data') and contains(., 'Name of Report 1 (scrubbed)')]")
但是我一直把垃圾放到python中的字符串var中。谢谢!
<tr class="odd">
<td style="text-align: center; width: 25px;"><input type='checkbox' name='report' value='4933047'/></td>
<td style="text-align: center; width: 65px;"><a href="#" onclick="getReportDetails('4933047')">4933047</a></td>
<td>Name of Report 1 (scrubbed)</td>
<td></td>
<td style="text-align: center; width: 60px;">'PRO_DET'</td>
<td style="text-align: center; width: 65px;">2018-05-19</td>
<td style="text-align: center; width: 95px;">2018-04-04</td>
<td style="text-align: center; width: 60px;">Complete</td></tr>
<tr class="even">
<td style="text-align: center; width: 25px;"><input type='checkbox' name='report' value='4933041'/></td>
<td style="text-align: center; width: 65px;"><a href="#" onclick="getReportDetails('4933041')">4933041</a></td>
<td>Name of Report 2 (scrubbed)</td>
<td></td>
<td style="text-align: center; width: 60px;">'PRO_DET'</td>
<td style="text-align: center; width: 65px;">2018-05-19</td>
<td style="text-align: center; width: 95px;">2018-04-04</td>
<td style="text-align: center; width: 60px;">Complete</td></tr>
答案 0 :(得分:0)
好的,所以我不是python专家,主要做C#,但是让我试一试,看看它是否对你有帮助。
假设你总是需要tr下的第三个td,你需要做的第一件事是创建一个tr的对象。由于行数很多,您将不得不进行循环。
tableRow = driver.find_elements_by_xpath("//tr")
这将返回一个表行的元素列表(假设这些是页面上的唯一行)。现在,对于你想获得第三个td元素的每一行,对吗?你只想对奇数或偶数的行做这个吗?
所以你在列表上做了一个for循环。
for el in tableRow:
thirdColumn = el.find_element_by_xpath("(//td)[3]")
thirdColumnText = thirdColumn.text
if "yourtext" in thirdColumnText:
firstColumn = el.find_element_by_xpath("(//td)[1]")
firstColumnInput = firstColumn.find_element_by_xpath("//input")
firstColumnInputValue = firstColumnInput.get_attribute("value")
//here you can assert if the firstColumnInputValue contains thirdColumnText
然后您可以根据需要使用第一列的值。
所以要解释一下我们在做什么,简而言之:
答案 1 :(得分:0)
根据提供的HTML获取每个类奇数或甚至的第三个<td>
节点,然后将其与字符串变量进行比较,如果匹配要获取第一个td的值,您可以编写一个函数并传递 String 以进行匹配,如下所示:
def test_me(myString):
myList = driver.find_elements_by_xpath("//tr[@class='odd' or @class='even']//following-sibling::td[3]")
for item in myList:
if item.text == myString:
print(item.find_element_by_xpath(".//preceding::td[2]/input").get_attribute("value"))
根据你的反问题,这里有详细信息:
xpath 中的following-sibling
关键字:示例:
(“//*[@class=’o2-app-header’]//following-sibling::a”)
描述:该技术用于定位特定节点的兄弟元素。
preceding
关键字:示例:
(“//body/preceding::*”)
描述:该技术用于定位特定元素的所有前面元素。