Selenium 如何對於分頁索引進行操作 (Python程式完整範例)

Selenium 如何對於分頁索引進行操作 (Python程式完整範例)

這篇文章主要說明如何針對 Pagenation進行操作

我們將舉一個實際的例子分頁的網頁元件, 並且利用 Python對該分頁網頁元件進行操作

例如: 點選 第四頁, 點選下一頁, 計算全部總頁數等

讀者可以利用這個範例自行延伸修改學習

分頁網頁元件

相關 HTML  如下

[pastacode lang=”markup” message=”” highlight=”” provider=”manual”]

<div class="span6">
                    <div class="pagination pagination-large">
                        <ul>
                            <li><a href="#">Prev</a></li>
                            <li class="active"><a href="#">1</a></li>
                            <li><a href="#">2</a></li>
                            <li><a href="#">3</a></li>
                            <li><a href="#">4</a></li>
                            <li><a href="#">5</a></li>
                            <li><a href="#">Next</a></li>
                        </ul>
                    </div>
                </div>

[/pastacode]

要對於分頁的網頁元件操作, 我們主要利用幾個小技巧

技巧1: 透過顯示文字來點選

例如要點選第四頁

dr.find_element_by_xpath("//a[contains(.,'4')]").click()

例如要點選 Next
dr.find_element_by_xpath("//a[contains(.,'Next')]").click()

技巧2: 計算總頁數

我們主要透過計算 <li>的個數來看全部有多少頁, 當然要扣掉頭尾就是全部的總頁數

total_pages = len(dr.find_element_by_class_name(‘span6‘).find_elements_by_tag_name(‘li‘))-2

另外一個方法是計算全部 <a>的個數

 len(driver.find_elements_by_tag_name('a')) - 2

 

技巧3: 目前所在頁數

這邊我們主要透過一個特別的 class_name動態的得知當下所在第幾頁

find_element_by_class_name(‘active‘).text

Python 完整程式碼

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

#coding=utf-8
from time import sleep
from selenium import webdriver
import os

## 讀取並開啟 PAgination.html
file_path = 'file:///'+os.path.abspath('pagination.html')
driver = webdriver.Chrome()
driver.get(file_path)

# 全部的頁數 - 利用計算 <li> 個數
total_pages = len(driver.find_element_by_class_name('span6').find_elements_by_tag_name('li')) - 2
print 'total page is :%s' %total_pages

# 全部的頁數 - 利用計算 <a> 個數
total_page = len(driver.find_elements_by_tag_name('a')) - 2
print 'method 2:total_pages is %d' % total_page

# 點選 Next 之後 點選 '4'
driver.find_element_by_xpath("//a[contains(.,'Next')]").click()
driver.find_element_by_xpath("//a[contains(.,'4')]").click()

 # 印出目前在第幾頁
current_page = driver.find_element_by_class_name('span6').find_element_by_class_name('active').text
print 'current page is %s' %current_page
sleep(5)
driver.quit()

[/pastacode]

HTML  分頁範例

[pastacode lang=”markup” message=”” highlight=”” provider=”manual”]

<html>
        <head>
            <meta http-equiv="content-type" content="text/html;charset=utf-8" />
            <title>Pagination</title>
            <script type="text/javascript" async="" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
            <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />
            <script type="text/javascript">
                $(document).ready(function(){
                    $('.pagination').find('li').click(function(){
                        $(this).parent().find('li').removeClass('active');
                        $(this).addClass('active');
                    });
                });
            </script>
        </head>

        <body>
            <h3>Pagination</h3>
            <div class="row-fluid">
                <div class="span6">
                    <div class="pagination pagination-large">
                        <ul>
                            <li><a href="#">Prev</a></li>
                            <li class="active"><a href="#">1</a></li>
                            <li><a href="#">2</a></li>
                            <li><a href="#">3</a></li>
                            <li><a href="#">4</a></li>
                            <li><a href="#">5</a></li>
                            <li><a href="#">Next</a></li>
                        </ul>
                    </div>
                </div>
            </div>
        </body>
        <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
    </html>

[/pastacode]

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *