2016-09-16 1 views
1

ページネーションの奇妙なケースに悩まされています。 https://cotthosting.com/NYRocklandExternal/LandRecords/protected/SrchQuickName.aspxセレンを使用したページ区切りの移動

検索結果は4つのカテゴリに分類されます。

1)何の検索は1つの結果ページ

3)以上の結果ページ未満12結果ページ )以上ありますがありますあり

2)結果はありませんがあります12の結果ページより。

ケース1の場合は、簡単ですが、私はちょうど通過しています。例2及び3については

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

、私が含む要素内のリンクのリストは、少なくとも1であるかどうかをチェックし、それをクリックしています。

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の質問:ここで私のコントロールとして確認できるものは何ですか?

リンクは2ページ、3ページなどの階層になりますが、私が現在のページ、たとえば1ページにいる場合は、2ページ目になることを確認してください2どうすれば3ページに行くのを確認できますか?

<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> 

を次のように結果リストの1ページのHTMLである私は、具体的にsub_tables[1]を使用して、この表にゼロという問題がそのI何次のボタンが存在しない場合にBS4コード上に2

参照利用することができます。 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> 

最後の2つのリンクがより多くの結果ページとLastがあることを示すために...です最後のページを示します。しかし、 `最後のリンクはすべてのページに存在し、最後のページにはアクティブなリンクではないだけです。

質問4の場合、lastリンクがクリック可能かどうかを確認して、これを停止ポイントとして使用できますか?

ケース4の大きな質問ですが、私はどのようにして...の検索結果ページを表示しますか?結果ページのリストは最大12個の値です。現在のページに最も近い10ページ、...、さらにページへのリンク、およびLastリンクが含まれます。だから私の結果が88ページと言うなら、何をすべきかわからない。

私は、完全なサンプル・ページへのダンプをリンクしています:あなたはである何ページを知っている必要があり、すべてのhttps://ghostbin.com/paste/nrb27

+0

[最後のリンク]をクリックしようとしましたか?それ以降の最後のページ番号が表示され、いくつのページがあるか分かります。また、ページ番号をクリックせずにURLのみを使用してナビゲートできるかどうかを確認します。私は最後にリンクがあるので、クリックすることができるはずです=>最後のページにあり、ページの総数を見つける必要があります。 – lauda

+0

@lauda、ページ数を取得するには2つの部分があります。結果ページが1ページ以上12ページ未満の場合、 'Last'はありませんが、' len(next_page_links) 'は私にページ数を与えます。ページが12より大きい場合、最後のものが 'Last'であるので、' next_page_links'の最後の要素から2ndを使って数値を得ることができます。したがって、この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ならば、あなたはそのページに
  • ですあなたは結果の数を数えることができるとどのように多くのページ に表示することができます - - 知っている多くの :イオン数は、あなたがするので4つのカテゴリーが必要should't

をクリックして、それを使用することができますリンクです各ナビゲーションのためまたは他の制御構造

  • で、必要に応じてページ

    1. がナビゲートする方法を作成し、あなたが

    を行うか、目に行く必要が何をすべきか最後のページに移動し、ページ1がリンクではなくなるまで後方に移動します。

  • 0

    数字を取得するには「最後のページ」をクリックし、各子をクリックします。

    関連する問題