元素定位呢,是定位到你要处理的元素,常用法法呢,是你要对它做的一些操作,点击、双击、输入内容等,
元素定位+常用方法===UI自动化
基本常用方法、特殊元素定位、frame操作、上传附件操作、cookie操作、selenium帮助文档
1、基本方法
(1)send_Keys方法:模拟键盘输入
driver.find_element_by_id("kw").send_keys("python")
(2)text方法:获取你定位的文本
driver.find_element_by_link_text("新闻").text
(3)get_attribute();获取元素value属性的值
driver.find_element_by_id("su").get_attribute("value")
(4)maximize_window():浏览器窗口最大化
driver.maximize_window()
(5)current_window_handle:返回窗口句柄,意思就是标识窗口的字符串。
driver.current_window_handle
(6)current_url:获取当前窗口URL,
driver.current_url
(7)is_selected():判断是否被选择,如果多选框是被选中,则true
find_element_by_id("xx").is_selected()
(8)is_enabled():如果元素可用,则true
find_element_by_id("kw").is_enabled()
(9)is_displayed():如果元素在页面显示,则true
find_element_by_id("kw").is_displayed()
(10)clear():清空输入框
driver.find_element_by_id("kw").send_keys("python")
driver.find_element_by_id("kw").clear()
(11)quit():关闭浏览器并杀掉chromedriver.exe进程。不开这个,后台会有很多exe进程
(12)title:获取页面“title”,百度首页的title是“百度一下,你就知道”
driver.title
(13)refresh():刷新界面
driver.refresh()
(14)back():浏览器工具栏向后操作,比如:访问百度首页并后退到空页面:
#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.back()
(15)forward():浏览器工具栏向前操作,跟上面的相反,如下又跑到了百度网页
#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.back()
driver.forward()
2、特殊元素定位
(1)鼠标悬停操作
selenium中将键盘鼠标封装在action china类中,主要有单击、双击、拖拽等\
click() # 单击
click_and_hold()#单击并且按住不放
double_click()#双击
context_click()#右击
drag_and_drop(source,target)#拖拽
drag_and_drop(source,xoffset,yoffset)#将目标拖拽到目标位置
key_down(value,element=None)#按住某键,实现快捷操作
key_up()#松开某键
move_to_element(to_element)#将鼠标移动到某个元素上
move_to_element_with_offset(to_element,xoffset,yoffset)#移动到指定坐标
perform()#执行前面的一系列actionchains。
release()#释放按下的坐标
参考,定位设置,并进行鼠标悬浮后,
定位到搜索设置并点击
#coding=utf-8
from selenium import webdriver
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
bg_config = driver.find_element_by_id("s-usersetting-top")
ActionChains(driver).move_to_element(bg_config).perform()
driver.find_element_by_link_text("搜索设置").click()
driver.quit()
(2)select操作
三种:select_by_index、select_by_value、select_by_visible_text,第三种用的比较多,可维护性好,第一种也不错,第二种也不错,我习惯用第3种
#coding=utf-8
from selenium import webdriver
from selenium.webdriver import ActionChains
import time
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
bg_config = driver.find_element_by_id("s-usersetting-top")
ActionChains(driver).move_to_element(bg_config).perform()
driver.find_element_by_link_text("搜索设置").click()
time.sleep(3)
# 定位到下拉框
se = driver.find_element_by_id('nr')
# 选择元素
Select(se).select_by_visible_text('每页显示20条')
driver.quit()
对返回项(options)的3种处理方法:
# 返回选中的内容
ops = Select(se).all_selected_options
for i in ops:
print(i.text)
# 返回所有的内容
ops = Select(se).options
for i in ops:
print(i.text)
# 返回第一个被选中的选项
ops = Select(se).first_selected_option
for i in ops:
print(i.text)
(3)利用javascript操作页面元素
webdriver对部分浏览器上的控件并不是直接支持的,如:右侧滚动条、副文本等,而是借助js间接操作,
webdriver提供了2种:
execute_script():同步执行代码
execute_async_script():异步执行代码
要实现在百度搜索框输入selenium,完整代码如下:
#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
js = 'document.getElementById("kw").value="selenium"'
driver.execute_script(js)
driver.quit()
用js实现对浏览器滚动条的操作
#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.set_window_size(800,700)
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
js = "window.scrollTo(100,300)"
time.sleep(2)
driver.execute_script(js)
time.sleep(2)
driver.quit()
(4)jQuery操作页面元素
jquery是javascript的类库,元素定位的强力补充,打通了元素定位的任督二脉。具体参考jquery选择器即可,不过现在用xpth的比较多,可以复制绝对路径后,是真的舒服。
#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.set_window_size(800,700)
jq = "$('#kw').val('selenium')"
driver.execute_script(jq)
time.sleep(2)
driver.quit()
(5)常用的键盘事件
Keys.BACK_SPACE #删除键
Keys.SPACE #空格键
Keys.TAB #TAB键
Keys.BACKSPACE #会推键
Keys.CONTROL,"a" #ctrl+a
Keys.CONTROL,"c" #ctrl+c
Keys.CONTROL,"v" #ctrl+v
Keys.CONTROL,"x" #ctrl+x
Keys.F1 #F1键
Keys.F12 #f12
输入selenium,并删除m
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id('kw').send_keys(Keys.BACKSPACE)
# driver.find_element_by_id("kw").send_keys("selenium"+Keys.BACKSPACE)
driver.quit()
(5)Frame操作
frame标签有三类:frameset、frame、iframe,其中frameset不需要切换切换框架。iframe、frame需要切换内这个框内才能定位到元素
登录QQ邮箱为例子,如图:
#coding=utf-8
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://mail.qq.com/")
driver.maximize_window()
driver.find_element_by_id('u').send_keys('test')
quit()
报错:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:“css selector”,“selector”:"[id=“u”]"}
原因:用户名嵌套在iFrame框架内,定位元素,发现上一曾有frame,frame的属性值id=‘login_frame’
#coding=utf-8
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://mail.qq.com/")
driver.maximize_window()
driver.switch_to.frame('login_frame')
driver.find_element_by_id('u').send_keys('test')
quit()
print('test finished')
如果要去框架外面定位,则返回驱动:
driver.switch_to.default_content()
说几个对frame定位的方式:
(1)通过index定位:
driver.switch_to.frame(0):0代表第一个frame
(2)通过name属性定位:
driver.switch_to.frame('login_frame')
(3)通过webelement定位:
driver.switch_to.frame(driver.find_elements_by_id('login_frame'))
(6)上传附件操作
selenium本身无法识别windows窗口,举例三种上传方式:
第一种
定位“添加附件”
driver.find_element_by_name('UploadFile').send_keys('D:\\python\\chengdu.zip')
第二种:
借助第三方库pywinauto,它是界面操作的工具类库,专门处理widows GUI,只能用在windows
from pywinatuo.applicaton import Application
# 定位到窗口
app = app.connect(title_re="打开",clsaa_name="#32770")
# 设置文件路径
app["打开"]["EDit1"].SetDditText("D:\soft\ip.txt")
time.sleep(2)
# 单击按钮
app["打开"]["Button1"].click()
print("end")
第三种:
用autoit实现,它是basic语言开发的对windows进行自动化模拟操作的工具。可以和所有标准widows控件进行交互,脚本可以变成可执行的程序,易于移植,可以创作图形化界面,可以调用windows API函数
此处不做介绍,重点掌握第二种即可
(7)cookie操作【用的不多,详细的内容以后用到了再补充吧】
selenium提供了读取、添加、删除cookie的操作
add_cookie(name)
delete_all_cookie()
delete_cookie(name)
get_cookie(name):返回名为name的cookie信息
get_cookies():返回当前会话的所有cookie信息
(8)selenium帮助文档
暂无