首页 > 解决方案 > 如果没有下一步按钮,只有编号可用,我如何转到下一页?

问题描述

如何进入下一页,因为没有下一步按钮或类似的东西,他们只提供编号。

from selenium import webdriver
from bs4 import BeautifulSoup as bs
import time

url = 'http://dciindia.gov.in/DentistsSearch.aspx?Reg_Type=D&RegUnder=0&IDRId=&IDRName=&CourseId=0&RegDate=0&CouncilId='

driver = webdriver.Chrome('C:\chromedriver.exe')
driver.get(url)
driver.maximize_window()

next_page = True
while next_page == True:
    soup = bs(driver.page_source, 'html.parser')
    table = soup.find('table',{'id':'gvSearchDentistlist'})
    try:
        rows = table.find_all('tr')
        for row in rows:
            if len(row.find_all('td')) == 6:
                data = row.find_all('td')
                root_url = data[5].input['onclick'].split(",")[4]
                link ='http://dciindia.gov.in/'+root_url
                print("LINK:"+link)
    except:
        pass
    try:
        driver.find_element_by_xpath('//*[@id="gvSearchDentistlist"]/tbody/tr[52]/td/table/tbody/tr/td[1]/a').click()
        time.sleep(1)
    except:
        print ('No more pages')
        next_page=False

driver.close()

请帮助我解决这个条件。谢谢。

标签: python-3.xbeautifulsoupselenium-chromedriver

解决方案


您的每个next button均值都有独特的属性,其中包含a[href*="Page$this_is_number_of_pages"],其中之一:

a[href*="Page$10"]

因此,我建议您使用css_selector而不是xpath,并为循环中的每个页面使用增量:

next_page_number=2
next_page = True
while next_page == True:
    ....
    ....
    ....

    try:
        driver.find_element_by_css_selector('a[href*="Page$' +str(next_page_number) +'"]').click()
        next_page_number+=1
        time.sleep(1)
    except:
        print ('No more pages')
        next_page=False

或者,如果您仍想使用 xpath,请使用以下命令:

driver.find_element_by_xpath('//a[contains(@href,"Page$' +str(next_page_number) +'")]').click()

*更新

它将for loop如下所示:

for next_page_number in range(2, 100+1):
    ....
    ....
    driver.find_element_by_css_selector('a[href*="Page$' +str(next_page_number) +'"]').click()
    time.sleep(1)

推荐阅读