目录
1.2.1driver.save_screenshot(filename/full_path)
1.2.2driver.get_screenshot_as_file(完整的路径/文件名)
1.2.3driver.get_screenshot_as_png()
1.2.4driver.get_screenshot_as_base64()
1.页面截图操作
1.1截取当前页面
1.2.1driver.save_screenshot(filename/full_path)
from selenium import webdriver
# 定义一个驱动的对象
driver=webdriver.Chrome()
# 打开需要测试的页面
driver.get("https://www.baidu.com")
# 截屏
driver.save_screenshot('sanmu.png')
1.2.2driver.get_screenshot_as_file(完整的路径/文件名)
# 打开需要测试的网页
driver.get('http://news.baidu.com/')
# 截屏
driver.get_screenshot_as_file('sanmu.png')
1.2.3driver.get_screenshot_as_png()
返回二进制数据流,然后通过文件读写的方式去保存数据。
# 打开需要测试的页面
driver.get("https://www.baidu.com")
# 截屏
data=driver.get_screenshot_as_png()
# 通过文件读写形式,把数据存储到本地
with open('sanmu.jpg','wb') as file:
file.write(data)
1.2.4driver.get_screenshot_as_base64()
返回base64编码格式的数据,然后通过文件读写的形式存储解码后的数据,完成截屏。
# 打开需要测试的页面
driver.get("https://www.baidu.com")
# 通过driver.get_screenshot_as_base64()方法获取屏幕的base64编码格式的数据
base64_data=driver.get_screenshot_as_base64()
# 对数据解码
image_data=base64.b64decode(base64_data)
# 通过文件读写的形式,保存解码后的数据
with open('sanmu.jpg','wb') as file:
file.write(image_data)
1.2截取整个页面(长截图)
可执行JavaScript 脚本,将页面的滚动条拖到页面底部,然后再拖回顶部,最后截图。
from selenium import webdriver
import time
#take_screenshot封装
def take_screenshot(url, save_fn="sanmu.png"):
driver = webdriver.Chrome()
driver.set_window_size(1200, 900)
driver.get(url)
browser.execute_script("""
(function () {
var y = 0;
var step = 100;
window.scroll(0,0);
function f() {
if (y < document.body.scrollHeight) {
y += step;
window.scroll(0, y);
setTimeout(f, 100);
} else {
window.scroll(0, 0);
document.title += "scroll-done";
}
}
setTimeout(f, 1000);
})();
""")
for i in xrange(30):
if "scroll-done" in browser.title:
break
time.sleep(10)
driver.save_screenshot(save_fn)
driver.close()
if __name__ == "__main__":
take_screenshot("http://baidu.com")
2.页面元素属性增删改查方法
#新增属性
driver.execute_script(“arguments[0].%s=arguments[1]” %attributeName,elementObj, value)
#删除属性
driver.execute_script(“arguments[0].removeAttribute(arguments[1])”,elementObj,attributeName)
#修改属性
driver.execute_script(“arguments[0].setAttribute(arguments[1],arguments[2])”, elementObj, attributeName, value)
#获取属性
elementObj.get_attribute(attributeName)
3.下拉滚动条方法
3.1滑动至页面底部
js="window.scrollTo(0,document.body.scrollHeight)"
driver.execute_script(js)
3.2滑动至顶部
js="window.scrollTo(0,-document.body.scrollHeight)"
driver.execute_script(js)
3.3滑动至具体位置
window.scrollBy(0,-500) # 向上滚动500个像素
window.scrollBy(0,500) # 向下滑动500个像素
window.scrollBy(-500,0) # 向左滚动500个像素
window.scrollBy(500,0) # 向右滑动500个像素
driver.execute_script("window.scrollTo(x,y)") # 滑动到具体位置(坐标)
3.4滑动至目标元素可见
driver.execute_script("arguments[0].scrollIntoView(true);", element) # 向下滚动至元素可见
driver.execute_script("arguments[0].scrollIntoView(false);",element) # 向上滚动至元素可见
4.窗口及 Frame 切换方法
4.1frame简介
frame 元素在html语法中,其内部会包含一个被嵌入的另一份html文档。当使用selenium打开一个网页,操作范围缺省当前的 html , 并不包含被嵌入的html文档里面的内容。
如果要操作被嵌入的html文档中的元素,须切换操作范围到被嵌入的文档中。
driver.switch_to.frame(frame_reference)#切换
driver.switch_to.default_content()#切回原html页面
4.2窗口切换
在网页上操作,点击一个链接或者按钮,会打开新窗口, 需要切换窗口对当前窗口元素定位。
#简单切换
handles = driver.window_handles
driver.switch_to.window(handles[1])#开始访问的是句柄0,第二个页面是1
#循环遍历确定
for handle in driver.window_handles:
# 先切换到该窗口
wb.switch_to.window(handle)
# 得到该窗口的标题栏字符串,判断是不是要操作的窗口
if '窗口标题' in driver.title:
# 如果是,那么WebDriver对象就是对应的该窗口,跳出循环
break
如果要跳回原来页面:
#变量保存当前窗口的句柄
mainWindow = driver.current_window_handle
#切换到初始窗口
driv.switch_to.window(mainWindow)