如何停止点击同一个按钮,而按钮总是存在硒

2024-04-25 08:58:30 发布

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

我遇到了一个问题,在使用Selenium刮取多个页面之前,只需使用click next page按钮并使用NoSuchElementException停止它。你知道吗

但我现在面对的url是元素总是存在的,在最后一页,如果我点击next page按钮,它只会重新加载当前页面。你知道吗

任何人都可以帮助解决如何停止点击同一个按钮?你知道吗

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


Tags: namebydriverseleniumpageitems页面elements
2条回答

[已编辑]

您可以通过在下一页链接中匹配当前页url和下一页url来解决此问题。 如果当前页面url与下一页链接中的url匹配,则它是最后一页。否则继续报废。你知道吗

您应该在存储当前页面URL的地方有一个变量,当您单击selenium的下一个页面链接时,您将获得页面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

正如我在图片中看到的(我假设您共享的图片是最后一页的),检查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()
       }

相关问题 更多 >