当硒一直存在时如何停止单击同一按钮

时间:2019-01-14 07:24:28

标签: python selenium

我遇到了一个问题,在我用Selenium抓取多页之前,只需单击“下一页”按钮,然后使用NoSuchElementException停止它。

但是我现在面对的url始终存在,在最后一页中,如果单击“下一页”按钮,它将重新加载当前页面。

任何人都可以帮助解决如何停止单击同一按钮吗?

items=driver.find_elements_by_class_name('item')
while True:
        try:
            #click next page
            driver.find_element_by_link_text('下一页').click()
            sleep(5)
            #scrpae data here
            items=driver.find_elements_by_class_name('item')

            for i in range(0, len(items)):

               results.append(items[i])
               print(items[i])



        except NoSuchElementException:

            break        

有关页面的详细信息,您可以查看下面的图片

Fullsize image

2 个答案:

答案 0 :(得分:2)

[已编辑]

您可以通过匹配下一页链接中的当前页面URL和下一页URL来解决此问题。 如果当前页面的URL与下一页链接中的URL相匹配,则为最后一页。否则继续报废。

您应该有一个用于存储当前页面URL的变量,并且当您按硒单击下一页链接时,您将获得页面URL并与上一个匹配。

这就是我的意思:

url = "https://humkinar.com.pk/"
driver.get(url)
items=driver.find_elements_by_class_name('item')
current_page_url = ""
prev_page_url = url
while True:
    try:
        driver.find_element_by_link_text('下一页').click()
        current_page_url = driver.current_url
        if current_page_url != prev_page_url:
            time.sleep(5)
            items=driver.find_elements_by_class_name('item')
            for i in range(0, len(items)):
               results.append(items[i])
               print(items[i])
            prev_page_url = current_page_url
        else:
            break
    except NoSuchElementException:
        break

答案 1 :(得分:1)

我在图片中看到的(我想您共享的图片是最后一页),请检查className == 'disable'<a class='disable'> <some text in chinese></a>中的break;

更新:

items=driver.find_elements_by_class_name('item')
while True:
    try:
        #click next page
        next = driver.find_element_by_link_text('下一页')
        next.click()
        sleep(5)
        #scrpae data here
        items=driver.find_elements_by_class_name('item')

        for i in range(0, len(items)):

           results.append(items[i])
           print(items[i])

           break;        
       if(next.getAttribute('class') == 'disable'){
          throw new Exception()
       }