场景

从上一节的例子中可以看出,webdriver可以很方便的使用find_element方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用find_elements方法。

定位一组对象一般用于以下场景:

  • 批量操作对象,比如将页面上所有的checkbox都勾上
  • 先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个

代码

S6.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form enctype="multipart/form-data">
<div>
<input type="text" name="user" />
<p>请选择性别:</p>
男:<input type="radio" name="gender" value="1" />
女:<input type="radio" name="gender" value="2" checked="checked"/>
Alex:<input type="radio" name="gender" value="3"/>
<p>爱好</p>
篮球:<input type="checkbox" name="favor" value="1" />
足球:<input type="checkbox" name="favor" value="2" checked="checked" />
皮球:<input type="checkbox" name="favor" value="3" />
台球:<input type="checkbox" name="favor" value="4" checked="checked"/>
网球:<input type="checkbox" name="favor" value="5" />
<p>上传文件</p>
<input type="file" name="fname"/>
</div> <input type="submit" value="提交" />
<input type="reset" value="重置" />
</form>
</body>
</html>

  定位一组对象.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
Created on 2018/5/9 11:35
@author: Jeff Lee
@file: 定位一组对象.py
'''
from selenium import webdriver
from time import sleep
import os if'HTTP_PROXY'in os.environ:
del os.environ['HTTP_PROXY'] dr = webdriver.Firefox()
file_path ='file://'+ os.path.abspath('s6.html')
print (file_path)
dr.get(file_path) ## 选择所有的checkbox并全部勾上
checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]')
for checkbox in checkboxes:
if not checkbox.get_attribute('checked'):
checkbox.click()
sleep(1)
dr.refresh()
sleep(2) # 打印当前页面上有多少个checkbox
print (len(dr.find_elements_by_css_selector('input[type=checkbox]'))) # 选择页面上所有的input,然后从中过滤出所有的checkbox并勾选之
inputs = dr.find_elements_by_tag_name('input')
for input in inputs:
if input.get_attribute('type') == 'checkbox':
if not input.get_attribute('checked'):
input.click()
sleep(1) # 把页面上最后1个checkbox的勾给去掉
dr.find_elements_by_css_selector('input[type=checkbox]').pop().click()
sleep(1) dr.quit()

  

最新文章

  1. 并查集(union-find)算法
  2. C Primer Plus_第10章_数组和指针_编程练习
  3. iOS解析XML数据
  4. [TCPIP] DNS Note
  5. express+gulp构建项目(三)gulp任务
  6. CodeForces - 699B One Bomb
  7. Nginx模块之————RTMP模块的FFmpeg的配置问题是FFmpeg的连续退出
  8. linux实现c多进程
  9. dede 调用四级导航
  10. js给php传值
  11. excel表格公式出现#REF是什么意思
  12. hadoop2.5.2学习及实践笔记(二)—— 编译源代码及导入源码至eclipse
  13. Linux下Chrome浏览器的BUG
  14. Android VideoView
  15. Java 设计模式(四)-工厂方法模式 (FactoryMethod Pattern)
  16. Sublime Text 关闭自动更新的办法
  17. maven的下载安装,配置本地仓库
  18. [福大软工] W班 软件产品案例分析
  19. jdbc的入门学习
  20. linux为什么要使用CentOS开发?

热门文章

  1. centos7.5下kubeadm安装kubernetes集群安装
  2. delphi 控制音量 静音的类
  3. C++ primer ch6 函数基础-1
  4. ORM一对多增加记录
  5. OC copy mutableCopy, 浅拷贝,深拷贝
  6. Javascript 对象的创建和属性的判定
  7. Unable to connect to zookeeper server within timeout: 5000
  8. ReactiveX 学习笔记(2)创建数据流
  9. JQuery+Ajax实现唯一性验证、正则
  10. Swift中的的注释