2016-09-16 3 views
1

이상한 페이지 매김을하고 있습니다. https://cotthosting.com/NYRocklandExternal/LandRecords/protected/SrchQuickName.aspx셀레늄으로 페이지 매김 탐색하기

검색 결과가 4 개 범주로 나뉩니다.

1) 더 검색 한 결과 페이지

3) 하나 이상의 결과 페이지 미만 12 결과 페이지

4

) 더있다가가 있습니다

2) 검색 결과가 없습니다 있습니다 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에 대한 질문 : 여기에서 내 제어로 확인할 수있는 것은 무엇입니까?

링크는 2 페이지, 3 페이지 등의 href입니다.하지만 현재 페이지에있는 경우 페이지 1과 같이 까다로운 부분은 페이지 2로 가고 페이지에있을 때 어떻게해야합니까? 2 어떻게 3 페이지로 갈 것인가? 특히 문제가되는

더 다음 버튼 없다 sub_tables[1]이 경우 BS4 코드 위 참조하여

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

I이 테이블에 제로 수를 다음과 같이 결과 목록 1 페이지의 HTML은 그 I 활용할 수 있습니다. 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

마지막 링크를 클릭하려고 했습니까? 그 후에 마지막 페이지 번호를 볼 수 있고 가지고있는 페이지의 수를 알 수 있습니다. 또한 페이지 번호를 클릭하지 않고 URL 만 사용하여 탐색 할 수 있는지 확인하십시오. 마지막으로 링크가 표시되어 있으므로 클릭 할 수 있어야합니다. => 마지막 페이지에 있어야하고 총 페이지 수를 찾아야합니다. – lauda

+0

@lauda, ​​페이지 수 얻기에는 두 개의 조각이 있습니다. 결과 페이지가 1 개 이상 12 개 미만인 경우 'Last'는 없지만 len (next_page_links)는 페이지 수를 줄 것입니다. 페이지가 12보다 크다면, 예를 들어 마지막 페이지가'Last'이므로'next_page_links'의 마지막 요소에서 2를 사용하여 숫자를 얻을 수 있습니다. 따라서이 next_page_links [-2] .get_text()는 숫자를 반환합니다. 그러나 검색을 수행하기 전에 페이지가 12 개가 될지 12 개가 될지를 결정할 수 없습니다.하지만 '...'의 존재를 검색 할 수는 있습니다. 모든 링크를 반복하는 것은 어려운 일입니다. 예 : 15 결과 페이지 –

답변

1

먼저 당신이 당신을 어떤 페이지 알아야합니다.

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

그런 다음 수를 추출 : XPath를 사용하여, 현재 페이지 번호

찾기 요소를 : 그것을 달성하기 위해

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. 각 네비게이션를 들어이나 다른 제어 구조
  2. 필요한 경우 이동하는 방법을 만들기는

을 또는 토륨에 갈 필요가 무엇 마지막 페이지는 페이지 1이 링크가 아닐 때까지 뒤로 시작합니다.

0

"마지막 페이지"를 클릭하여 번호를 얻은 다음 각 아이를 클릭하십시오.