Selenium Webdriver常用方法
时间:2022-05-05
本文章向大家介绍Selenium Webdriver常用方法,主要内容包括实例化方法、浏览器操作、简单对象定位、操作Element对象、鼠标事件、键盘事件、设置等待时间、定位frame中的对象、多窗口切换、下拉框处理、执行JavaScrapt、Cookie处理、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
目录[-]
实例化方法
from selenium import webdriver
driver = webdriver.Chrome(executable_path='C:Program Files (x86)GoogleChromeApplicationchromedriver')
浏览器操作
- 浏览器最大化
driver.maximize_window()
- 设置浏览器宽高
driver.set_window_size(480, 800)
- 控制浏览器前进后退
driver.back()
driver.forward()
简单对象定位
get_element_by_id() # id
get_element_by_name() # name
get_element_by_class_name() # class_name
get_element_by_tag_name() # tag_name
get_element_by_link_text() # link_text
get_element_by_partial_link_text() # 部分link_text
get_element_by_xpath() # xpath定位
get_element_by_link_text() # link_text
find_element_by_css_selector() # css定位
操作Element对象
find_element_by_id("user_name").clear() # 清楚元素内容
find_element_by_id("user_name").send_keys("username") # 按键输入
find_element_by_id("dl_an_submit").click() # 单机元素
find_element_by_id("dl_an_submit").submit() # 提交表单
- Element常用方法
driver.find_element_by_name('tj_trnews').size # 元素尺寸
driver.find_element_by_name('tj_trnews').text # 返回元素文本
driver.find_element_by_name('tj_trnews').get_attribute('class') # 获取属性值
driver.find_element_by_name('tj_trnews').is_displayed() # 是否用户可见
鼠标事件
from selenium.webdriver.common.action_chains import ActionChains
el = driver.find_element_by_name('tj_trnews') # 目标元素
ActionChains(driver).context_click(el).perform() # 右击目标元素
ActionChains(driver).double_click(el).perform() # 双击目标元素
source = driver.find_element_by_id('lg') # 目标元素原始位置
target = driver.find_element_by_id('kw') # 拖动的目标位置
ActionChains(driver).drag_and_drop(source, target).perform() # 拖动元素
ActionChains(driver).move_to_element(el).perform() # 鼠标移动的目标元素上
ActionChains(driver).click_and_hold(el).perform() # 移动到目标元素按下鼠标左键
键盘事件
from selenium.webdriver.common.keys import Keys
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("selenium") # 输入框输入内容
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) # 从后删除一个字符(删除键)
driver.find_element_by_id("kw").send_keys(Keys.SPACE) # 输入空格
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a') # ctrl + a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x') # ctrl + x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v') # ctrl + v 粘贴
driver.find_element_by_id("su").send_keys(Keys.ENTER) # 回车
设置等待时间
有时候网页加载比较慢,如果程序没有等待就可能出现定位不到的情况。
- 强制等待sleep() 强制等待比较暴力,调用time模块的sleep()方法强制让程序等待。
- 隐性等待implicitly_wait() iimplicitly_wait()是设置了最大等待时间,如果在规定时间内加载完成,则继续执行下面操作,否则一直等到时间截止再执行下一步。但是这种也有一个弊端,那就如果你需要的元素已经加载出来了,但是页面整体还没有加载完成,程序也会一直等待,也并不智能。
- 显性等待WebDriverWait() 它是需要传入一个判断条件的匿名函数,每隔一段时间去判断条件函数,如果条件成立则继续下一步,如果不成立则继续等待。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
# 强制等待
time.sleep(5)
# 隐形等待
driver.implicitly_wait(30)
# 显性等待
element=WebDriverWait(driver, 10).until(lambda driver:driver.find_element_by_id("kw")) # 当找到id为kw的元素时才执行下一步。超时时间为10秒,默认每0.5秒检测一次。
定位frame中的对象
对于frame嵌套的网站,一般只能操作外层的元素,如果需要进入frame内层就需要调用switch_to.frame()方法。
driver.switch_to.frame()
frame方法接收三种参数:frame name、index 和webelement
driver.switch_to.frame('frame_name')
driver.switch_to.frame(1)
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])
多窗口切换
要想在多个窗口之间切换,首先要获得每一个窗口的唯一标识符号(句柄)。通过获得的句柄来区别分不同的窗口,从而切换不同窗。
driver.get("http://example.com") # 打开一个窗口
now_handle = drvier.current_window_handle # 获取当前窗口句柄
driver.find_element_by_name('example').click() # 点击某个元素打开新的窗口(target="_black"的元素)
all_handle = drvier.window_handles # 获取所有窗口句柄
drvier.switch_to.window(now_handle) # 切换为第一窗口
driver.close() # 关闭当前窗口
下拉框处理
webdriver处理下拉框首先定位到下拉框内容,然后click某个option即可
m=driver.find_element_by_id("ShippingMethod") # 首先定位到下拉框
m.find_element_by_xpath("//option[@value='10.69']").click() # 然后点击下拉框选项
执行JavaScrapt
driver.execute_script('Java Scrapt Code')
# 例如下拉浏览器滚动条
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
Cookie处理
webdriver可以对cookie进行读取、增加、删除
get_cookies() # 获得所有 cookie 信息
get_cookie(name) # 返回特定 name 有 cookie 信息
add_cookie(cookie_dict) # 添加 cookie,必须有 name 和 value 值
delete_cookie(name) # 删除特定(部分)的 cookie 信息
delete_all_cookies() # 删除所有 cookie 信息
- phalcon-入门篇5(请求与返回)
- phalcon-入门篇2(HelloWord与PhalconTools)
- 数据库中间件 Sharding-JDBC 源码分析 —— SQL 解析(一)之语法解析
- phalcon-入门篇4(log日志和session缓存)
- zephir-(5)类型
- zephir-(10)内置函数
- zephir-(9)类和对象2
- 深度学习中的动手实践:在CIFAR-10上进行图像分类
- 数据库中间件 MyCAT源码分析 —— XA分布式事务
- [喵咪Golang(1)]Go语言开篇
- phalcon-进阶篇2(拦截器)
- 【死磕Java并发】—–深入分析synchronized的实现原理
- phalcon-进阶篇1(过滤与清理)
- phalcon-入门篇9(view层基础使用)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法