Python+selenium(定位一组元素)

时间:2023-03-08 16:39:24

我们熟知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+selenium(定位一组元素)

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):             默认获取一组元素中的第二个
  • ......