有没有一种方法可以使用Selenium python计算页面中的项目

时间:2019-07-31 03:21:58

标签: python selenium

我要自动化的页面是我的大学网站,其中包含有关每个科目的出勤率的所有信息,科目数量随不同学年的学生而有所不同

所以我需要一种自动计数主题数的方法

so subject 1 Xpath - //*[@id="MainContent_GridView4"]/tbody/tr[2]/td[2]
   subject 2 Xpath - //*[@id="MainContent_GridView4"]/tbody/tr[3]/td[2]

在xpath模式'tr [2]中,一个学生课程(Mech)的范围为2-10,其他学生课程(cse)的范围为2-9

temp = '//*[@id="MainContent_GridView4"]/tbody/tr['
for x in range(2,10):
       sub1 =temp + str(x) + ']/td[1]'
       k = driver.find_element(By.XPATH,sub1)

我提到的上述代码仅适用于Cse学生,当与mech学生页面一起使用时,似乎错过了最终列表中的主题 因此,如果有一种方法可以计数主题的数量,我可以在循环中使用该计数

2 个答案:

答案 0 :(得分:0)

您可以尝试使用find_elements代替find_element。如果使用提供的xpath未找到任何元素,它将返回一个空列表。因此,您可以围绕它建立逻辑以进行进一步的自动化。例如如果list的大小> 0,则执行其他操作。

答案 1 :(得分:-1)

您可以使用findElements来返回元素列表。

但是为此,您的xpath应该指向该td上的所有元素,因此您可以执行以下操作:

  

Xpath-// * [@@ == MainContent_GridView4'] / tbody / tr [2] / td

在上面的Xpath中,我删除了td的数组索引,因此按照上面的示例,现在您的xpath指向tr [2]中的所有td。

现在

count = driver.find_elements_by_xpath("//*[@id='MainContent_GridView4']/tbody/tr[2]/td");

len(count);

现在使用len来获取元素的大小

现在,您可以根据需要使用循环,因为您可以动态获取元素的确切大小