webdriver操作元素、获取元素常用方法
常用方法
- clear(): 清除文本。
- send_keys (value): 模拟按键输入(被操作元素需要是个文本输入框)。
- click(): 单击元素。
其他方法
#size: 返回元素的尺寸。
driver.find_element_by_id("iptPassword").size
#text: 获取元素的文本。
driver.find_element_by_id("iptUsername").text
#get_attribute(name): 获得属性值。
driver.find_element_by_id("kw").get_attribute("kw")
#title:用于获得当前页面的标题
driver.title
#current_url:用户获得当前页面的URL
driver.current_url
#tag_name:返回元素的tagname
driver.find_element_by_id("iptUsername").tag_nam
浏览器控制
控制浏览器大小
# 设定具体尺寸
driver.set_window_size(600, 600)
# 最大
driver.maximize_window()
# 最小
driver.minimize_window()
前进、后退、刷新
# 前进
driver.forward()
# 后退
driver.back()
# 刷新
driver.refresh()
浏览器cookies
常用方法
- get_cookies(): 获得所有 cookie 信息
- get_cookie(name): 返回字典的 key 为“name”的 cookie 信息
- add_cookie(cookie_dict) : 添加 cookie。“cookie_dict”指字典对象,必须有 name
和 value 值 - delete_cookie(name,optionsString):删除 cookie 信息。“name”是要删除的 cookie的名称,“optionsString”是该 cookie 的选项,目前支持的选项包括“路径”,“域”
- delete_all_cookies(): 删除所有 cookie 信息
鼠标事件
常用方法
- perform(): 执行操作
- context_click(): 右击;
- double_click(): 双击;
- drag_and_drop(): 拖动;
- move_to_element(): 鼠标悬停。
from selenium import webdriver
# 引入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome() driver.get("https://www.baidu.cn")
# 定位到要悬停的元素
above = driver.find_element_by_link_text("设置") # 对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()
键盘事件
常用方法
- 删除键(BackSpace)send_keys(Keys.BACK_SPACE)
- 空格键 (Space)send_keys(Keys.SPACE)
- 制表键(Tab) send_keys(Keys.TAB)
- 回退键(Esc)send_keys(Keys.ESCAPE)
- 回车键(Enter)send_keys(Keys.ENTER)
- 全选(Ctrl+A)send_keys(Keys.CONTROL,‘a’)
- 复制(Ctrl+C)send_keys(Keys.CONTROL,‘c’)
- 剪切(Ctrl+X)send_keys(Keys.CONTROL,‘x’)
- 粘贴(Ctrl+V)send_keys(Keys.CONTROL,‘v’)
- 键盘 F1 send_keys(Keys.F1)
- 键盘 F12send_keys(Keys.F12)
from selenium import webdriver
# 引入 Keys 模块
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome ()
driver.get("http://www.baidu.com")
#输入框输入内容
driver.find_element_by_id ("kw").send_keys("seleniumm")
#删除多输入的一个m
driver.find_element_by_id ("kw").send_keys(Keys.BACK_SPACE)
上传文件
通过输入文件路径上传
driver.find_element_by_id("albumUpload").send_keys("文件路径")
通过模拟键盘敲击上传
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import win32com.client # python -m pip install pypiwin32
ActionChains(driver).click(driver.find_element_by_id("albumUpload")).perform()
sh = win32com.client.Dispatch("WScript.shell")
time.sleep(3)
# 1、代码不联想 2、输入法要保持英文输入状态 3、无法处理中文
sh.Sendkeys("文件路径\r\n")
上传多个文件
通过输入文件路径上传
"文件1路径\n文件2路径"
通过模拟键盘上传
'"文件1路径" "文件2路径\r\n"'
内嵌网页iframe切换
常用方法
- switch_to.frame() 切换到iframe上
- switch_to.default_content() 切换回原主页面
# 定位到内嵌网页
ele = driver.find_element_by_css_selector("[class=\"ke-edit-iframe\"]")
# 切入内嵌网页中
driver.switch_to.frame(ele)
driver.find_element_by_css_selector("[class=\"ke-content\"]").send_keys("123")
# 切入内嵌网页后,若想再操作内嵌网页外的元素,需要再切出来
driver.switch_to.default_content()
浏览器标签页切换
使用方法
- current_window_handle:获得当前标签页句柄
- window_handles:返回所有便签页的句柄
- switch_to.window(标签页句柄):切换到对应的标签页
- 关闭标签页使用 close 方法
win_sli = driver.window_handles # 获取当前所有标签页的句柄
# 循环所有标签,直到找到标题、url、页面元素相符的标签,就停止切换,停留在当前标签页
for win in win_sli:
driver.switch_to.window(win)
# 如果标签页的标题不固定,还可以用网址判断
# 如果网址和标题都不固定,可以找一个目标标签页独有的元素,然后判断元素是否存在
if driver.title == "OPMS-项目管理软件+OA管理软件+CRM管理软件":
break
页面滚动
滚动用法
- window.scrollBy(0,500) 向下滚动500个像素
- window.scrollBy(0,-500) 向上滚动500个像素
- window.scrollBy(500,0) 向右滚动500个像素
- window.scrollBy(-500,0) 向左滚动500个像素
selenium实现滚动 - driver.execute_script(“window.scrollBy(0,500)”)
- driver.execute_script(“arguments[0].scrollIntoView();”, ele)
滚动至元素ele可见
截图
# 截图,截取全屏,参数为要保存图片的文件路径,官方建议用png格式
# 如果想截取登陆以后的界面:1、sleep 2、寻找一个登录后才有的元素
driver.get_screenshot_as_file("./a.png")
# 对元素进行截图
ele = driver.find_element_by_css_selector("[class=\"nav nav-pills nav-stacked custom-nav js-left-nav\"]")
ele.screenshot("./b.png")
警告框处理
用法
- text:返回 alert/confirm/prompt 中的文字信息
- accept():接受现有警告框
- dismiss():取消现有警告框
- send_keys(“haha”):发送文本至警告框
# 获取对话框对象
al = driver.switch_to.alert
# 确认对话框
al.accept()
下拉框处理
WebDriver提供了Select类来处理下拉框。注意,只有当下拉框是 select 标签的时候使用