selenium自动截图(网站全网页,解决滚动懒加载情况)

所遇问题

  • 1.许多网站采取的是滚动加载(懒加载)策略,想要截图页面加载网页全部内容。

实现步骤

driver_path = os.path.abspath(r'.\common\statics\chromedriver.exe') # 填写驱动存放位置
    service = Service(driver_path)
    option = webdriver.ChromeOptions()
    option.add_argument("--headless")
    option.add_argument('--disable-gpu') # 核显
    option.add_argument('--no-sandbox') # 无窗口模式
    option.add_experimental_option("detach", True)
    browser = webdriver.Chrome(service=service, options=option)
  • 2.自动截图(模拟人滚动滚动条)
	name = "截图保存的文件名"
    url = "截图的网站URL"
    try:
        img_path = os.path.abspath(r'../') + "截图保存的路径"
        browser.implicitly_wait(30) # 隐式等待页面加载
        browser.get(url)
        # 模拟人滚动滚动条,处理图片懒加载问题
        js_height = "return document.body.clientHeight"
        browser.get(url)
        k = 1
        height = browser.execute_script(js_height)
        while True:
            if k * 500 < height:
                js_move = "window.scrollTo(0,{})".format(k * 500)
                print(js_move)
                browser.execute_script(js_move)
                time.sleep(0.2)
                height = browser.execute_script(js_height)
                k += 1
            else:
                break
        time.sleep(1)
        # 直接截图截不全,调取最大网页截图, 获取网页宽高
        width = browser.execute_script(
                "return Math.max(document.body.scrollWidth, document.body.offsetWidth, "
                "document.documentElement.clientWidth, document.documentElement.scrollWidth, "
                "document.documentElement.offsetWidth);")
        height = browser.execute_script(
                "return Math.max(document.body.scrollHeight, document.body.offsetHeight, "
                "document.documentElement.clientHeight, document.documentElement.scrollHeight, "
                "document.documentElement.offsetHeight);")
        # 将浏览器的宽高设置成刚刚获取的宽高
        browser.set_window_size(width + 100, height + 100)
        time.sleep(1)
        png_path = img_path + '/{}-2.png'.format(name)
        # 截图
        browser.save_screenshot(png_path)
        return True
    except Exception as e:
        print("截图的时候发生错误")
        return False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值