1.窗口截图
用处:在断言后,发现实际结果与预期结果不一致,可用窗口截图
webdriver 提供了 get_screenshot_as_file 函数来获取当前窗口
代码示例
"""
webdriver 提供了 get_screenshot_as_file 函数来获取当前窗口
"""
from selenium import webdriver
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("http://www.baidu.com")
# 截取整个页面
driver.get_screenshot_as_file("./all.png") #保存在当前路径下,并取名为all.png
# 截取单个元素
ele = driver.find_element_by_id("kw")
ele.screenshot("./ele.png") #保存在当前路径下,并取名为ele.png
#关闭浏览器
driver.quit()
运行结果:
项目会新增两张图片
两张图片的样子:
ele.png
all.png
2.警告框处理
自己写一个test1.html界面
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>警告框处理</title>
<script type="text/javascript">
function duihua() {
alert("这个窗口是对话框!");
print('你点击了确认');
}
function queren() {
var se = confirm("确认框!");
if (se == true) {
print('你点击了确认1');
} else {
print('你点击了取消1');
}
}
function tishi() {
var se = prompt("请输入您的反馈意见", "测试")
if (se != null) {
print('你点击了确认2并输入了:' + se);
} else {
print('你点击了取消2');
}
// if (t != null && t != "") {
// document.write("刷新回到初始界面")
// }
}
function print(text) {
var dom = document.createElement('div')
dom.innerText = text
document.getElementsByTagName('body')[0].appendChild(dom)
}
</script>
</head>
<body>
<input id="bu1" type="button" onclick="duihua()" value="点击显示对话框"/>
<br>
<br>
<input id="bu2" type="button" onclick="queren()" value="点击显示确认框"/>
<br>
<br>
<input id="bu3" type="button" onclick="tishi()" value="点击显示提示框"/>
</body>
<html>
运行结果
js方法写的对话框,是无法定位的(即右键的时候,是没有“检查”选项的)
selenium当中处理JavaScript生成的alert弹框,警告,提示框,对话框等
用switch_to.alert
代码示例(确认对话框):
from selenium import webdriver
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("file:///D:/sonQin/pythonProjectSelenimu/day04/test1.html")
# 触发对话框
driver.find_element_by_id("bu1").click()
# 操作对话框,先获取对象,赋值给变量
al = driver.switch_to.alert # 注意 switch_to 后面是一个点
# 确定对话框
al.accept()
运行结果:
确认框的代码
提示框代码:
3.鼠标事件
# 鼠标悬停到 ele 元素
ActionChains(driver).move_to_element(ele).perform()
# 右击 ele 元素
ActionChains(driver).context_click(ele).perform()
# 双击ele元素
ActionChains(driver).double_click(ele).perform()
# 单击 ele 元素
ActionChains(driver).click(ele).perform()
# 拖动元素, 将ele1元素 拖到 ele2元素
ActionChains(driver).drag_and_drop(ele1, ele2).perform()
(简单:可以用test2.html界面实操,把黑色的框拖到绿色的框)
test2.html可在资源中自行下载,如有疑问,可在评论区留言
举例:访问百度界面(本人的百度是已登录的)
点击藏在更多里边的 翻译 按钮(要用到鼠标事件)
代码示例
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("http://www.baidu.com")
# 鼠标悬停到更多
# 想要对某个元素进行鼠标操作,首先要定位到这个元素
ele = driver.find_element_by_name("tj_briicon")
# 对定位到的元素执行鼠标悬停的操作(move_to_element()是鼠标悬停的操作)
ActionChains(driver).move_to_element(ele).perform()
# 鼠标事件有个特殊之处,我们所调用的函数只是注册动作,不会执行
# 如果想要执行,需要在之后加上 perform 函数
# 点击藏在更多里边的 翻译 按钮
ele = driver.find_element_by_css_selector('#s-top-more a[name="tj_fanyi"]')
ele.click()
4.键盘事件
代码示例
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("https://www.baidu.com")
# 定位到百度上的文本输入框
ele = driver.find_element_by_id("kw")
time.sleep(3) #下面加time.sleep(3)是为了观察效果
# 输入内容
ele.send_keys("seleniumn")
time.sleep(3)
# 删除最后一个多余的 n
ele.send_keys(Keys.BACK_SPACE)
time.sleep(3)
# 输入一个空格,然后再输入教程
# ele.send_keys(" 教程") #这行代码与下面两行代码的效果一样
ele.send_keys(Keys.SPACE)
ele.send_keys("教程")
# 全选输入框的内容
ele.send_keys(Keys.CONTROL, "a")
time.sleep(3)
# 剪切选中的内容
ele.send_keys(Keys.CONTROL, "x")
time.sleep(3)
# 黏贴剪切板里边的内容
ele.send_keys(Keys.CONTROL, "v")
time.sleep(3)
5.iframe切换
代码示例
import time
from selenium import webdriver
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("file:///D:/sonQin/pythonProjectSelenimu/day04/test3.html")
# 想要切换 iframe,首先定位到它
#如果iframe多层,那么就一层一层的找
ifa = driver.find_element_by_css_selector("iframe:nth-child(3)")
# 找到之后,就可以去切换了
driver.switch_to.frame(ifa)
# 切回到主页面
# driver.switch_to.default_content()
# time.sleep(3)
driver.find_element_by_class_name('ant-input-lg').send_keys("林黛玉")
ifa = driver.find_element_by_css_selector("iframe:nth-child(3)") 代码为啥是3
见如下图
6.多标签页
代码示例
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("https://www.baidu.com")
# 鼠标悬停到更多
# 想要对某个元素进行鼠标操作,首先要定位到这个元素
ele = driver.find_element_by_name("tj_briicon")
# 对定位到的元素执行鼠标悬停的操作(move_to_element()是鼠标悬停的操作)
ActionChains(driver).move_to_element(ele).perform()
# 鼠标事件有个特殊之处,我们所调用的函数只是注册动作,不会执行
# 如果想要执行,需要在之后加上 perform 函数
# 点击藏在更多里边的 翻译 按钮
ele = driver.find_element_by_css_selector('#s-top-more a[name="tj_fanyi"]')
ele.click()
# 获取当前所有的标签页的句柄 # 句柄,就是操作系统中的 唯一资源标识符
all_handles = driver.window_handles
for handle in all_handles:
driver.switch_to.window(handle) #切换标签页
if driver.title == "百度翻译-200种语言互译、沟通全世界!": #检验切换的标签页是【百度翻译】
break
# 在新打开的百度翻译的标签,文档翻译输入框,输入一些内容
driver.find_element_by_id("baidu_translate_input").send_keys("hello")
7.滚动页面
代码示例
"""
window.scrollBy()
window.scrollBy(0,500) 向下滚动500个像素
window.scrollBy(0,-500) 向上滚动500个像素
window.scrollBy(500,0) 向右滚动500个像素
window.scrollBy(-500,0) 向左滚动500个像素
"""
from selenium import webdriver
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("https://www.51job.com")
# 滚动条使用 JavaScript控制的, execute_script 函数可以帮我们执行js
driver.execute_script("window.scrollBy(0,500)")