簡體   English   中英

Selenium點擊下一頁直到最后一頁

[英]Selenium clicking to next page until on last page

我試圖繼續點擊這個網站的下一頁,每次將表數據附加到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()

我也試過這個:

try:
    link = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,'.pagination-next a')))
    driver.execute_script('arguments[0].scrollIntoView();', link)
    link.click()
except:
    keep_going = False

我已經嘗試過將print語句放入其中並且它一直停留在最后一頁。

這是下一個按鈕的第一頁/最后一頁的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>

您可以解決以下問題,

下一個按鈕將一直啟用,直到最后一頁,它將在最后一頁中被禁用。

因此,您可以創建兩個列表來查找已啟用的按鈕元素和已禁用的按鈕元素。 在任何時候,啟用元素列表或禁用元素列表大小都將為1。因此,如果元素被禁用,則可以中斷while循環,否則單擊下一個按鈕。

我不熟悉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;
        }
    }

next_page_btn.index(0).click()無法正常工作,但檢查next_page_btn的len工作是為了查找它是否是最后一頁,所以我能夠做到這一點。

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()

非常感謝你的幫助!

如何使用do / while循環並檢查“禁用”類是否包含在下一個按鈕的屬性中以退出? (請原諒語法。我只是把它扔到一起而沒試過)

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()

xPath到按鈕是:

//li[@class = 'pagination-next']/a

所以每次你需要加載下一頁時你都可以點擊這個元素:

next_page_btn = driver.find_elements_by_xpath("//li[@class = 'pagination-next']/a")
next_page_btn.index(0).click()

注意:您應該添加一個邏輯:

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:
        # do stuff

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM