Selenium点击下一页直到最后一页

2024-10-03 11:21:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在这个website上继续单击下一页,每次将表数据附加到csv文件,然后当我到达最后一页时,追加表数据并中断while循环

不幸的是,由于某些原因它一直停留在最后一页,我尝试了几种不同的方法来捕捉错误

while True:
  try :
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'Next'))).click()
  except :
      print("No more pages left")
      break
driver.quit()

我也试过这个:

^{pr2}$

我试过把打印声明放进去,结果它总是停留在最后一页。在

这是第一页的HTML/下一页按钮的最后一页,我不确定我是否可以利用它做些什么: 首页的HTML:

<li role="menuitem" ng-if="::directionLinks" ng-class="{disabled: noNext()||ngDisabled}" class="pagination-next" style=""><a href="" ng-click="selectPage(page + 1, $event)" ng-disabled="noNext()||ngDisabled" uib-tabindex-toggle="">Next</a></li>
    <a href="" ng-click="selectPage(page + 1, $event)" ng-disabled="noNext()||ngDisabled" uib-tabindex-toggle="">Next</a>
</li>

最后一页的HTML:

<li role="menuitem" ng-if="::directionLinks" ng-class="{disabled: noNext()||ngDisabled}" class="pagination-next disabled" style=""><a href="" ng-click="selectPage(page + 1, $event)" ng-disabled="noNext()||ngDisabled" uib-tabindex-toggle="" disabled="disabled" tabindex="-1">Next</a></li>
    <a href="" ng-click="selectPage(page + 1, $event)" ng-disabled="noNext()||ngDisabled" uib-tabindex-toggle="" disabled="disabled" tabindex="-1">Next</a>
</li>

Tags: eventpagelingclassnextclickhref
3条回答

下一页_btn.索引(0).click()不起作用,但检查next_page_btn的长度以确定它是否是最后一页,所以我可以这样做。在

while True:
    next_page_btn = driver.find_elements_by_xpath("//li[@class = 'pagination-next']/a")
    if len(next_page_btn) < 1:
        print("No more pages left")
        break
    else:
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'Next'))).click()

非常感谢你的帮助!在

你可以解决如下问题

“下一步”按钮将一直启用,直到最后一页,它将在最后一页被禁用。在

因此,您可以创建两个列表来查找enabled button元素和disabled button元素。在任何时候,启用的元素列表或禁用的元素列表大小都将一个。所以,如果元素被禁用,则可以中断while循环,否则单击next按钮。在

我不熟悉python语法。所以,您可以转换以下java代码,然后使用它。它肯定会有用的。在

代码:

    boolean hasNextPage=true;

    while(hasNextPage){
        List<WebElement> enabled_next_page_btn=driver.findElements(By.xpath("//li[@class='pagination-next']/a"));
        List<WebElement> disabled_next_page_btn=driver.findElements(By.xpath("//li[@class='pagination-next disabled']/a"));

        //If the Next button is enabled/available, then enabled_next_page_btn size will be one.
        // So,you can perform the click action and then do the action
        if(enabled_next_page_btn.size()>0){
            enabled_next_page_btn.get(0).click();
            hasNextPage=true;
        }else if(disabled_next_page_btn.size()>0){
            System.out.println("No more Pages Available");
            break;
        }
    }

使用do/while循环,检查“disabled”类是否包含在next按钮的属性中以退出?(请原谅语法。我只是把这个拼凑在一起,还没试过)

string classAttribute

try :

     do
     {
          IWebElement element = driver.findElement(By.LINK_TEXT("Next"))
          classAttribute = element.GetAttribute("class")
          element.click()
     }
     while(!classAttribute.contains("disabled"))

except :

     pass

driver.quit()

相关问题 更多 >