听着,我知道你是想从我的answer计算你之前的一个问题的总页数。在上一个案例中,由于我们可以直接获得最后一个页码,所以它起作用了,但这里不是这样。在
虽然页数不直接可用,但总的条目数是-
现在,正如你在上面7月份的截图中看到的,这个数字是174。假设将分页长度(一页中的条目数)设为默认值10,那么页数应该是18(17页,每页10条,其余4条额外加一页)。在
计算页数应该是简单的逻辑。如果您在total_entries变量中得到了这个总条目数,那么页数应该是(取自this:number_of_pages = (total_entries/10) + 1
Python默认情况下按除法运算符返回下界整数,因此174/10将返回17,添加{}将返回{}。这就是-18页的页数。在
现在,提取条目的总数。您可以使用下面的定位器来找到包含它的元素。在
^{pr2}$
但是这个元素包含这样的文本-Showing 1-10 of 174。整个字符串中只需要174部分。为此,首先提取“of”后面的字符串,然后将其转换为int
从文本中以int形式提取条目总数的算法:showing_text = driver.find_element_by_xpath("//span[@class='showing']").text #Showing 1-10 of 174
number_of_entries_text = showing_text.split("of",1)[1] # 174 as text
number_of_entries = int( re.findall(r'\d+',number_of_entries_text)[0]) #174 as int
number_of_pages = (number_of_entries/10) + 1 #18
最终代码:def pagination( driver ):
data = []
last_element = driver.find_element_by_xpath("//span[@class='showing']")
if last_element is None:
number_of_pages = 1
else:
showing_text = driver.find_element_by_xpath("//span[@class='showing']").text number_of_entries_text = showing_text.split("of",1)[1]
number_of_entries = int( re.findall(r'\d+',number_of_entries_text)[0])
number_of_pages = (number_of_entries/10) +1
for i in range(number_of_pages - 1):
driver.find_element_by_xpath('//a[ contains( concat( " ", normalize-space( @class ), " "), " next ") ]').click()
time.sleep(1)
注意:
我认为我的解决方案更好,因为您不必反复检查任何元素是否可用或捕捉任何异常。你只需直接得到页数,然后点击下一步按钮很多次。在