from flask import Flask, request, send_file from selenium import webdriver from selenium.common.exceptions import WebDriverException from PIL import Image from io import BytesIO app = Flask(__name__) def take_screenshot(url): options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') try: wd = webdriver.Chrome(options=options) wd.set_window_size(1080, 720) # ウィンドウサイズの調整 wd.get(url) wd.implicitly_wait(10) screenshot = wd.get_screenshot_as_png() except WebDriverException as e: # エラーが発生した場合は、プレースホルダーとして空の画像を返す return Image.new('RGB', (1, 1)) finally: if wd: wd.quit() return Image.open(BytesIO(screenshot)) @app.route('/screenshot', methods=['GET']) def screenshot(): url = request.args.get('url') if not url: return "URLパラメーターが必要です。", 400 # 指定されたURLのスクリーンショットを撮影 image = take_screenshot(url) # スクリーンショットをメモリ上に保存し、レスポンスとして返す img_io = BytesIO() image.save(img_io, 'PNG') img_io.seek(0) return send_file(img_io, mimetype='image/png') if __name__ == "__main__": app.run(host="0.0.0.0", port=7860)