Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import time
- import hashlib
- from urllib3 import PoolManager
- from selenium import webdriver
- from selenium.common.exceptions import UnexpectedAlertPresentException
- from dotenv import load_dotenv
- from src.utils import get_valid_filename, create_temp_folder, write_to_file
- load_dotenv()
- http = PoolManager()
- if not os.path.exists('temp'):
- os.makedirs('temp')
- options = webdriver.ChromeOptions()
- options.add_argument('--headless')
- options.add_argument('--disable-gpu')
- options.add_argument('--disable-dev-shm-usage')
- options.add_argument('--no-sandbox')
- options.add_argument('--disable-application-cache')
- base_url = os.getenv('PREVIEW_URL')
- embed_js = os.getenv('EMBED_JS')
- embed_css = os.getenv('EMBED_CSS')
- chrome_driver = webdriver.Chrome(
- os.getenv("CHROME_DRIVER_PATH"),
- options=options
- )
- chrome_driver.set_window_size(1428, 1280)
- def take_screenshot(url):
- file_name = f'scr_0_{int(time.time())}.png'
- path = f'temp/{file_name}'
- chrome_driver.get(url)
- exep = True
- exep_count = 0
- while exep and exep_count < 10:
- try:
- chrome_driver.save_screenshot(path)
- exep = False
- except UnexpectedAlertPresentException:
- chrome_driver.switch_to.alert.dismiss()
- exep_count += 1
- exep = True
- if exep_count == 10:
- return 'assets/preview-failed.png'
- return path
- def download_page(id):
- fpath = download_assets_for('page', id)
- source = driver_get_page(id)
- write_to_file(source, f'{fpath}/page-{id}.html')
- return fpath
- def download_funnel(id, pages):
- fpath = download_assets_for('funnel', id)
- for page in pages:
- source = driver_get_page(page.id)
- file_path = f'{fpath}/{get_valid_filename(page.name)}_{page.id}.html'
- write_to_file(source, file_path)
- return fpath
- def driver_get_page(id):
- m = hashlib.md5()
- m.update(f'{id}igloo-preview'.encode('utf-8'))
- code = m.hexdigest()
- chrome_driver.get(f'{base_url}{id}?code={code}')
- source = chrome_driver.page_source
- source = source.replace(embed_js, 'assets/embed.js')
- source = source.replace(embed_css, 'assets/embed.css')
- return source
- def driver_download_asset(fpath, path):
- r = http.request('GET', path)
- with open(fpath, 'wb') as f:
- f.write(r.data)
- f.close()
- def download_assets_for(prefix, id):
- fpath = create_temp_folder(prefix, id)
- driver_download_asset(f'{fpath}/embed.js', embed_js)
- driver_download_asset(f'{fpath}/embed.css', embed_css)
- return fpath
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement