本文共 2990 字,大约阅读时间需要 9 分钟。
在 Selenium 中截取网页全屏,可以使用内置方法 save_screenshot。以下是实现代码:
from selenium import webdriverfrom time import sleepclass test: def test_method(): driver = webdriver.Chrome() driver.maximize_window() driver.get('https://www.baidu.com/') sleep(2) driver.save_screenshot("demo1.png") 运行后,打开 demo1.png 文件即可看到完整的网页截图。
以百度首页的“百度一下”按钮为例,使用 ID 定位的方法截图特定元素:
from selenium import webdriverfrom time import sleepclass test: def test_method(): 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 文件即可看到“百度一下”按钮的截图。
为了截取特定位置的图片,可以使用 Selenium 获取元素的坐标,并结合 Pillow 库进行截图处理:
from selenium import webdriverfrom time import sleepfrom PIL import Imageclass test: def test_method(): driver = webdriver.Chrome() driver.maximize_window() driver.get('https://www.baidu.com/') sleep(2) driver.save_screenshot("baidu1.png") element = driver.find_element_by_id("kw") print("获取元素的坐标") location = element.location print(location) print(element.size) top = element.location['y'] bottom = top + element.size['height'] left = element.location['x'] right = left + element.size['width'] print(top, bottom, left, right) img = Image.open('baidu1.png') img = img.crop((left, top, right, bottom)) img.show() img.save("baidu2.png") 运行后,打开 baidu2.png 文件即可看到截取的特定区域图片。
通过 Selenium 和 Pillow 库实现多张图片的拼接。以下是实现代码:
from selenium import webdriverfrom PIL import Imagedriver = 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, loc2 = (0, 0), (0, size1[1] - size) joint.paste(img1, loc1) joint.paste(img2, loc2) joint.save(output)JS = { '滚动到页尾': "window.scroll({top:document.body.clientHeight,left:0,behavior:'auto'});", '滚动到': "window.scroll({top:%d,left:0,behavior:'auto'});",}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(JS['滚动到'] % (current_h * i)) driver.save_screenshot(f'test_{i}.png') join_images('result.png', f'test_{i}.png')driver.execute_script(JS['滚动到页尾'])driver.save_screenshot('test_end.png')join_images('result.png', 'test_end.png', size=current_h - int(body_h % current_h)) 运行后,打开 result.png 文件即可看到拼接后的完整图片。
转载地址:http://niafk.baihongyu.com/