2016-09-16 84 views
1

我陷入了一個奇怪的分頁案例。我刮從搜尋結果https://cotthosting.com/NYRocklandExternal/LandRecords/protected/SrchQuickName.aspx用硒導航分頁

我有搜索結果分爲4類。

1)沒有對搜索結果

2)有一個結果

3)有多於一個的搜索結果頁,但小於12個結果網頁

4)有更超過12個結果頁面。

對於情況1,這很容易,我只是通過。

results = driver.find_element_by_class_name('GridView') 
if len(results)== 0: 
    pass 

對於情況2和3,我檢查包含元素中的鏈接列表是否至少有一個,然後單擊它。

else: 
    results_table = bsObj.find('table', {'class':'GridView'}) 
    sub_tables = results_table.find_all('table') 
    next_page_links = sub_tables[1].find_all('a') 
    if len(next_page_links) == 0 
     scrapeResults() 
    else: 
     scrapeResults() 
     ####GO TO NEXT PAGE UNTIL THERE IS NO NEXT PAGE 

對於案例2和案例3的疑問:我可以檢查這裏作爲我的控件嗎?

鏈接是hrefs到第2,3頁等等。但棘手的部分是,如果我在當前頁面上,比如說第1頁,我如何確保我進入第2頁,以及何時進入頁面2我如何確定我要去第3頁?對結果列表頁面1的HTML是與具體使用sub_tables[1]見上文BS4代碼在殼體2

的問題是不存在下一按鈕如下

<table cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;"> 
    <tr> 
     <td>Page: <span>1</span></td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$2&#39;)">2</a></td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$3&#39;)">3</a></td> 
    </tr> 
</table> 

我可以零到這個表中,我可以利用。 html中的結果頁面沒有任何變化。除了鏈接前span的編號之外,沒有什麼可以隔離當前頁面。而且我想它停止,當它到達最後一頁

情況4中,HTML看起來像這樣:

<table cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;"> 
    <tr> 
     <td>Page: <span>1</span></td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$2&#39;)">2</a></td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$3&#39;)">3</a></td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$4&#39;)">4</a></td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$5&#39;)">5</a></td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$6&#39;)">6</a></td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$7&#39;)">7</a></td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$8&#39;)">8</a></td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$9&#39;)">9</a></td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$10&#39;)">10</a></td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$11&#39;)">...</a></td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$Last&#39;)">Last</a></td> 
    </tr> 
</table> 

最後兩個環節都...表明有更多的結果頁和Last表示最後一頁。但是,每個頁面上都存在「最後一個鏈接」,並且它只在最後一頁上,它不是活動鏈接。

對於案例4的問題,我如何檢查last鏈接是否可點擊並將其用作我的停留點?

對於案例4的更大問題,我該如何修改...以查看其他結果頁?結果頁面列表最多爲12個值。即與當前頁面最近的10頁,鏈接到更多頁面的...和鏈接Last。所以如果我的結果有88頁,我不知道該怎麼辦。

我轉儲鏈接到一個完整的示例頁面:https://ghostbin.com/paste/nrb27所有的

+0

您是否嘗試單擊最後一個鏈接?,也許您可​​以在此之後看到最後一個頁碼,並知道您有多少頁。此外,請檢查您是否可以在不點擊頁碼並僅使用網址的情況下進行導航。正如我看到Last是一個鏈接,所以你應該能夠點擊它=>你應該在最後一頁,並找到頁面的總數。 – lauda

+0

@lauda,獲取頁數有兩個部分。如果多於1個結果頁面但少於12個,則沒有'Last',但是len(next_page_links)'會給我多少頁面。如果頁面超過12個,是的,我可以使用'next_page_links'中最後一個元素的第二個數字得到數字,因爲最後一個元素是'Last'。所以這個'next_page_links [-2] .get_text()'會返回數字。但是,在我進行搜索之前,我無法確定頁面是多於還是少於12.我可以搜索「......」的存在。遍歷所有鏈接是挑戰。例如15個結果頁面 –

回答

1

首先,你要知道什麼是網頁你。爲了實現這一目標:

與當前頁碼查找元素,使用XPath:

currentPageElement = driver.find_element(By.XPATH, '//table[./tbody/tr/td[text()='Page: ']]//span') 

然後將解壓後的數字:

currentPageNumber = int(currentPageElement.text) 

然後你就可以做任何事情:去下一個頁面只需添加1到當前頁碼,轉到最後一頁並閱讀數字等

1

您應該做的是統計頁面中的結果數量並使用總結果中的值來估計總頁數除以。

如果將檢查頁面,你會看到:`

Displaying records 1 - 500 of 32563 at 10:08 AM ET on 9/16/2016

知道了頁面的總數,開始導航和檢查,如果需要的頁面加載和了解當前頁面,你可以得到基於在頁面上2例頁面導航數字動態選擇:

  • 如果分頁數量不是一個鏈接,那麼你是網頁
  • 如果paginat上離子數量是一個鏈接,你可以用它來點擊

您should't需要4類,因爲: - 你可以算結果的數量和多少能 一個頁面上顯示 - 知道的號如果需要用對或其他控制結構

  • 對於每個導航

    1. 頁面創建導航的方法做你需要做的

    還是去TH什麼e最後一頁並向後開始,直到第1頁不是鏈接。

  • 0

    點擊「最後一頁」獲取他的號碼,然後點擊每個孩子。