python 利用selenium + webdriver 给网站截图
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from PIL import Image, ImageFont, ImageDraw import base64 import io import os def get_screenshot(url): """ 获取网页截图 Args: url: 网址 Returns: 截图文件路径 """ # 设置浏览器选项 options = Options() # 添加无头模式参数 options.add_argument('--headless') # 无头模式,不显示浏览器界面 # 设置浏览器窗口大小 options.add_argument('--window-size=1280,850') # 设置浏览器窗口大小为 1280 x 850 # 禁用 GPU 加速 options.add_argument('--disable-gpu') # 禁用 GPU 加速,提升性能 # 禁用共享内存 options.add_argument('--disable-dev-shm-usage') # 禁用共享内存,避免占用过多系统资源 # 禁用沙盒 options.add_argument('--no-sandbox') # 禁用沙盒,提高安全性 # 设置 User-Agent options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36') # 设置 User-Agent,模拟浏览器类型 options.add_experimental_option("excludeSwitches", ["enable-popup-blocking"]) # 创建 ChromeDriver 可执行文件的路径 chrome_driver_path = "C:/chromedriver/chromedriver.exe" # 请根据实际情况修改路径 # 创建 Service 对象 service = Service(executable_path=chrome_driver_path) # 创建 Service 对象,传入 ChromeDriver 可执行文件路径 # 创建浏览器驱动 driver = webdriver.Chrome(service=service, options=options) # 创建 Chrome 浏览器驱动,并传入 Service 对象和 Options 对象 # 设置超时时间 driver.set_page_load_timeout(20) # 设置页面加载超时时间为 20 秒 driver.execute_script("window.open = function(){}") # 处理网址,去除特殊字符 filename = ''.join(c for c in url.replace('http://', '').replace('https://', '') if c.isalnum() or c in ['-', '_', '.']) # 处理网址,去除特殊字符,并替换 http 和 https # 打开网页 try: driver.get(url) # 打开网页 except TimeoutException: print('网页打开超时') # 如果网页打开超时,则打印提示信息 return None # 返回 None try: # 获取网页全屏截图 screenshot_base64 = driver.get_screenshot_as_base64() # 将 base64 字符串解码为二进制数据 screenshot_bytes = io.BytesIO(base64.b64decode(screenshot_base64)) # 将二进制数据转换为 JPG 图片 image = Image.open(screenshot_bytes) image = image.convert('RGB') # 保存 JPG 图片 (jpg格式相对节省空间) #image.save(f'{filename}.jpg', quality=80) image.save(f'{filename}.jpg') finally: # 关闭浏览器 driver.quit() # 确保浏览器关闭 # 返回截图文件路径 return f'{filename}.jpg' # 测试 url = "http://www.baidu.com" screenshot_path = get_screenshot(url) if screenshot_path is not None: print(f'截图已保存至 {screenshot_path}') else: print('截图失败')
版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章来源:来自于网络收集。