本文共 3534 字,大约阅读时间需要 11 分钟。
在软件测试和自动化测试领域,截取网页截图是一个常用的操作。以下是几种常见的截图方法,帮助你快速掌握取控。
在 Selenium 中截取网页全屏,可以使用内置的 save_screenshot 方法。以下是示例代码:
from selenium import webdriverfrom time import sleepclass test: def test_case(): driver = webdriver.Chrome() driver.maximize_window() driver.get('https://www.baidu.com/') sleep(2) driver.save_screenshot("demo1.png") 运行代码后,demo1.png 文件中会保存当前网页的全屏截图。
如果你需要截取特定元素的图片,可以使用 find_element_by_id 等定位方法,结合 screenshot 方法。以百度首页的“百度一下”按钮为例:
from selenium import webdriverfrom time import sleepclass test: def test_case(): driver = webdriver.Chrome() driver.maximize_window() driver.get('https://www.baidu.com/') sleep(2) element = driver.find_element_by_id("su") element.screenshot("element.png") driver.quit() 运行后,element.png 中会显示“百度一下”按钮的截图。
有时候你需要截取特定位置的内容,可以通过获取元素坐标来实现。以下是截取百度搜索框的示例:
from selenium import webdriverfrom time import sleepfrom PIL import Imageclass test: def test_case(): driver = webdriver.Chrome() driver.maximize_window() driver.get('https://www.baidu.com/') sleep(2) element = driver.find_element_by_id("kw") print("获取元素的坐标") location = element.location print(location) print(element.size) top = element.location['y'] bottom = element.location['y'] + element.size['height'] left = element.location['x'] right = element.location['x'] + element.size['width'] print(top, bottom, left, right) im = Image.open('baidu1.png') im = im.crop((left, top, right, bottom)) im.show() im.save("baidu2.png") driver.quit() 运行后,baidu2.png 中会显示截取的搜索框及其周围内容。
如果需要将多张图片拼接成一张大图,可以使用 Python 的 PIL 库。以下是基于 Selenium 截取的图片拼接方法:
from selenium import webdriverfrom PIL import Imageclass test: def test_case(): driver = webdriver.Chrome() driver.maximize_window() driver.get('https://www.csdn.net/') def join_images(png1, png2, size=0, output='result.png'): """图片拼接 :param png1: 图片1 :param png2: 图片2 :param size: 两个图片重叠的距离 :param output: 输出的图片文件 :return: """ img1 = Image.open(png1) img2 = Image.open(png2) size1 = img1.size size2 = img2.size joint = Image.new('RGB', (size1[0], size1[1] + size2[1] - size)) loc1 = (0, 0) loc2 = (0, size1[1] - size) joint.paste(img1, loc1) joint.paste(img2, loc2) joint.save(output) # 截取当前页面 driver.save_screenshot('result.png') # 拼接多张图(示例) body_h = int(driver.find_element_by_xpath('//body').size.get('height')) current_h = Image.open('result.png').size[1] image_list = ['result.png'] for i in range(1, int(body_h / current_h)): driver.execute_script(f"window.scroll({top: {current_h * i}}, left: 0, behavior: 'auto'});") driver.save_screenshot(f'test_{i}.png') join_images('result.png', f'test_{i}.png') # 处理最后一张图 driver.execute_script("window.scroll({top: {body_h}, left: 0, behavior: 'auto'});") driver.save_screenshot('test_end.png') join_images('result.png', 'test_end.png', size=current_h - int(body_h % current_h)) driver.quit() 运行代码后,result.png 中会显示拼接后的完整图像。
通过以上方法,你可以根据需求灵活截取网页内容,满足不同测试场景的需求。
转载地址:http://diafk.baihongyu.com/