我试图继续点击本网站的下一页,每次都将表数据附加到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
我尝试将打印语句放入,它一直停留在最后一页。
这是下一页按钮的第一页/最后一页的 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的镜头可以找出它是否是最后一页,所以我能够做到这一点。
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