#python #selenium
К примеру selenium'ом это решается красиво и лаконично, но при этом открывается окно браузера. Можно ли как-нибудь делать скриншоты без этого? Возможно, используя другой подход (не через selenium) from selenium import webdriver DRIVER = "chromedriver.exe" driver = webdriver.Chrome(DRIVER) driver.get("https://ru.stackoverflow.com/") screenshot = driver.save_screenshot("my_screenshot.png") driver.quit()
Ответы
Ответ 1
Нашел способ. Просто нужно было использовать PhantomJS, с ним окно браузера не открывается . from selenium import webdriver DRIVER = '\phantomjs-2.1.1-windows\\bin\phantomjs.exe' driver = webdriver.PhantomJS(DRIVER) driver.get("https://ru.stackoverflow.com/") screenshot = driver.save_screenshot("my_screenshot.png") driver.quit()Ответ 2
Самый простой способ снимок экрана c веб-страницей получить — это запустить браузер с подходящими опциями: #!/usr/bin/env python3 from subprocess import check_call url = 'https://ru.stackoverflow.com' width, height = 1920, 1080 filename = "my_screenshot.png" chrome_executable = 'chromium-browser' check_call([chrome_executable, '--headless', f'--screenshot={filename}', f'--window-size={width},{height}', '--hide-scrollbars', url]) Аналог для selenium выглядит как: #!/usr/bin/env python3 from selenium import webdriver # $ pip install selenium options = webdriver.ChromeOptions() options.add_argument('headless') options.add_argument(f'window-size={width},{height}') options.add_argument('hide-scrollbars') # get chromedriver from # https://sites.google.com/a/chromium.org/chromedriver/downloads browser = webdriver.Chrome(chrome_options=options) browser.get(url) browser.save_screenshot(filename) Можно напрямую API использовать без selenium, к примеру, у firefox есть marionette: #!/usr/bin/env python2 import os # $ pip install marionette_driver from marionette_driver.marionette import Marionette firefox_binary = '/usr/bin/firefox' # full path os.environ['MOZ_HEADLESS'] = '1' client = Marionette('localhost', bin=firefox_binary, port=2828) try: client.start_session() client.set_window_size(width, height) client.navigate(url) with open(filename, 'wb') as file: file.write(client.screenshot(format='binary')) finally: client.quit() Для chrome можно использовать puppeteer или его аналог для Питона pyppeteer: #!/usr/bin/env python3 import asyncio import pyppeteer # $ pip install pyppeteer async def main(): browser = await pyppeteer.launch() page = await browser.newPage() await page.goto(url) await page.setViewport(dict(width=width, height=height)) await page.screenshot(path=filename, fullPage=False) await browser.close() asyncio.get_event_loop().run_until_complete(main()) Все представленные варианты только видимую часть сохраняют. При желании можно целиком страницу в виде картинки получить. К примеру, в последнем варианте, достаточно fullPage=True указать.