Python+selenium(定位一組元素)


我們熟知Webdriver有8種定位元素的方法,但是當需要定位一組元素的時候,可以使用Webdriver提供的與之對應的8種用於定位一組元素的方法,分別是:

  • find_elements_by_id()
  • find_elements_by_name()
  • find_elements_by_class_name()
  • find_elements_by_tag_name()
  • find_elements_by_link_text()
  • find_elements_by_partial_link_text()
  • find_elements_by_xpath()
  • find_elements_by_link_css_selector()

常見的定位一組元素一般用於以下場景:

  1. 批量操作元素,例如勾選頁面上所有的復選框。
  2. 先獲取一組元素,再從這組對象中過濾出需要操作的元素。例如定位頁面上所有的checkbox,然后選擇其中的一個進行操作。

手動創建一個checkbox.html頁面:

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>Checkbox</title>
<link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="http://cdn.bootcss.com/bootstrap/3.3.3.0/css/bootstrap.min.js"></script>
</head>
    <body>
    <h3>checkbox</h3>
    <div class="well">
        <form class="form-horizontal">
            <div class="control-group">
                <label class="control-lable" for="c1">checkbox1</label>
                <div class="controls">
                    <input type="checkbox" id="c1" />
                </div>
            </div>
            <div class="control-group">
                <label class="control-lable" for="c2">checkbox2</label>
                <div class="controls">
                    <input type="checkbox" id="c2" />
                </div>
            </div>
            <div class="control-group">
                <label class="control-lable" for="c3">checkbox3</label>
                <div class="controls">
                    <input type="checkbox" id="c3" />
                </div>
            </div>
        </form>
    </div>
    </body>
</html>

瀏覽器打開如下:

Python代碼:

from selenium import webdriver
import time

driver = webdriver.Firefox()
file_path = r'E:\python_script\Webdriver\checkbox.html'
driver.get(file_path)

# 選擇頁面上所有tag name為input的元素
inputs = driver.find_elements_by_tag_name('input')

# 然后從中過濾出type為checkbox的元素,單擊勾選
for i in inputs:
    if i.get_attribute('type') == 'checkbox':
        i.click()
        time.sleep(1)

driver.quit()

如果只想要選擇所有復選框中的一個,那么可以:

driver.find_elements_by_tag_name('input')[1].click()

除此之外,還可以使用XP啊退貨或CSS來直接判斷屬性值,從而進行單擊操作

# 使用xpath找到type=checkbox的元素
chekboxes = driver.find_elements_by_xpath("//input[@type='checkbox']")

# 通過CSS找到type=checkbox的元素
checkboxes = driver.find_elements_by_css_selector('input[type=checkbox]')

選擇之后,想要取消某一個復選框的操作:

# 把頁面第二個checkbox的勾給去掉
driver.find_elements_by_css_selector('input[type=checkbox]').pop(1).click()

pop()方法用於獲取列表中的一個元素(默認為最后一個元素)

  • pop()或pop(-1):默認獲取一組元素的最后一個
  • pop(0):             默認獲取一組元素中的第一個
  • pop(1):             默認獲取一組元素中的第二個
  • ......

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM