zoukankan      html  css  js  c++  java
  • python 使用headless chrome滚动截图

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import util
    chrome_options = Options()
    #chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    chrome_options.add_argument('--disable-infobars')
    
    chrome_options.binary_location = r"C:Program Files (x86)GoogleChromeApplicationchrome.exe"
    driver=webdriver.Chrome(chrome_options=chrome_options)
    driver.get("http://www.mizuhobank.co.jp/sp/loan/card/index.html")
    #driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    util.fullpage_screenshot(driver, "3.png")
    driver.close()
    driver.quit()
    

      

    util.py
    import os
    import time
    
    from PIL import Image
    
    def fullpage_screenshot(driver, file):
    
            print("Starting chrome full page screenshot workaround ...")
    
            total_width = driver.execute_script("return document.body.offsetWidth")
            total_height = driver.execute_script("return document.body.parentNode.scrollHeight")
            viewport_width = driver.execute_script("return document.body.clientWidth")
            viewport_height = driver.execute_script("return window.innerHeight")
            print("Total: ({0}, {1}), Viewport: ({2},{3})".format(total_width, total_height,viewport_width,viewport_height))
            rectangles = []
    
            i = 0
            while i < total_height:
                ii = 0
                top_height = i + viewport_height
    
                if top_height > total_height:
                    top_height = total_height
    
                while ii < total_
                    top_width = ii + viewport_width
    
                    if top_width > total_
                        top_width = total_width
    
                    print("Appending rectangle ({0},{1},{2},{3})".format(ii, i, top_width, top_height))
                    rectangles.append((ii, i, top_width,top_height))
    
                    ii = ii + viewport_width
    
                i = i + viewport_height
    
            stitched_image = Image.new('RGB', (total_width, total_height))
            previous = None
            part = 0
    
            for rectangle in rectangles:
                if not previous is None:
                    driver.execute_script("window.scrollTo({0}, {1})".format(rectangle[0], rectangle[1]))
                    print("Scrolled To ({0},{1})".format(rectangle[0], rectangle[1]))
                    time.sleep(0.2)
    
                file_name = "part_{0}.png".format(part)
                print("Capturing {0} ...".format(file_name))
    
                driver.get_screenshot_as_file(file_name)
                screenshot = Image.open(file_name)
    
                if rectangle[1] + viewport_height > total_height:
                    offset = (rectangle[0], total_height - viewport_height)
                else:
                    offset = (rectangle[0], rectangle[1])
    
                print("Adding to stitched image with offset ({0}, {1})".format(offset[0],offset[1]))
                stitched_image.paste(screenshot, offset)
    
                del screenshot
                os.remove(file_name)
                part = part + 1
                previous = rectangle
    
            stitched_image.save(file)
            print("Finishing chrome full page screenshot workaround...")
            return True
    

      

  • 相关阅读:
    面相服务的架构SOA
    分布式系统架构体系
    分布式系统基础
    结对开发第一阶段,10天冲刺第八天
    结对开发第一阶段,10天冲刺第七天
    结对开发第一阶段,10天冲刺第六天
    结对开发第一阶段,10天冲刺第五天
    结对开发第一阶段,10天冲刺第四天
    结对开发第一阶段,10天冲刺第三天
    结对开发第一阶段,10天冲刺第二天
  • 原文地址:https://www.cnblogs.com/c-x-a/p/8341141.html
Copyright © 2011-2022 走看看