我试图从这个Webpage中名为“last matches”的特定表中获取最后的结果
例如xpath
第一次会议的结果如下:
int1 = driver.find_element_by_xpath("//*[@id=\"sr-container\"]/div/div/div[3]/div/div/div/div[7]/div[2]/div/div/div/div/div[1]/table/tbody/tr[1]/td[5]/div/div[2]").get_attribute("innerText")
第二次会议是这样的:
int2 = driver.find_element_by_xpath("//*[@id=\"sr-container\"]/div/div/div[3]/div/div/div/div[7]/div[2]/div/div/div/div/div[1]/table/tbody/tr[2]/td[5]/div/div[2]").get_attribute("innerText")
如果网页的形状与我发布的一样,我可以从该表中提取所有结果,我的问题是当我有这样一个会议时Link,xpath
是不一样的,没有任何东西可以工作
有没有更好的方法来定位这个Last Matches table
并提取数据,即使页面的形状不同
感谢你们的帮助
是的,您可能需要引入xpath轴:
XPATH:
阅读有关xpath轴here的更多信息
这是针对您的两个链接进行的测试
问题是HTML中有两个单独的表(左表和右表)用于
Last matches
。为了得到所有的结果,您需要对它们进行迭代。我使用下面的f-string使xpath成为动态的,因为两个表的xpath完全相同,只有括号[]
之间有一个数字注意,我还使用了更通用的xPath。当DOM中发生更改时(如您所见),这不会受到影响。给定此路径
//table[@class='table']
,该页面上有4个表,2个表用于Last matches
,2个表用于Next matches
,因此我们只希望以前2个表为目标,因此动态迭代列表tables = [1,2]
,以填充XPath结果:
另一个好的选择是在xpath中使用
ancestor
。我将主定位器绑定到表名,这样会更可靠使用它,您可以找到其他定位器及其文本。只要用正确的路径将它们放入循环即可。 在子xpath中
.//td
表示元素名为td.
的主定位器的直接子级我的解决方案:
输出:
第一link: ['0:4','3:4','2:2','0:1','3:0','2:2','0:4','1:0','2:1','1:1','1:2','2:4']
第二link: ['2:0','2:1','0:2','0:0','4:2','1:0','3:0','1:1','1:0','2:1','1:1','0:8']
更新: 我能做的交换分数的最快方法是分别获得两个分数,将它们放在一个单独的列表中,然后使用
zip
交换。 结果是两个元组列表结果是两个元组列表
有更有效的方法,但我建议单独问一个问题
相关问题 更多 >
编程相关推荐