python+selenium web浏览器全屏长截图的两种方式

1、此方法只适用于能够无头方式运行的浏览器,比如:chrome

def get_image(url,pic_name):
    
# chromedriver的路径
    chromedriver = r"D:\code\FrontDotAutomate_30\util\browser_driver\chromedriver_235.exe"
    os.environ["webdriver.chrome.driver"] = chromedriver
#设置chrome开启的模式,headless就是无界面模式
#一定要使用这个模式,不然截不了全页面,只能截到你电脑的高度
    chrome_options = Options()
    chrome_options.add_argument('headless')
    driver = webdriver.Chrome(chromedriver,chrome_options=chrome_options)

#控制浏览器写入并转到链接
    driver.get(url)
    sleep(1)
#接下来是全屏的关键,用js获取页面的宽高,如果有其他需要用js的部分也可以用这个方法
    width = driver.execute_script("return document.documentElement.scrollWidth")
    height = driver.execute_script("return document.documentElement.scrollHeight")
    print(width,height)
#将浏览器的宽高设置成刚刚获取的宽高
    driver.set_window_size(width, height)
    sleep(1)
#截图并关掉浏览器
    driver.save_screenshot(pic_name)
    driver.close()

2、借助PIL库,对多屏进行拼接,适用于所有可以使用selenium吊起的浏览器

def get_scroll_page(driver,query,short_dir):
    driver.fullscreen_window()  # 全屏窗口
    driver.get(url)
    window_height = driver.get_window_size()['height']  # 窗口高度

    page_height = driver.execute_script('return document.documentElement.scrollHeight')  # 页面高度
    driver.save_screenshot(r'D:\code\FrontDotAutomate_30\screenshort\screenshort.png')

    if page_height > window_height:
        n = page_height // window_height  # 需要滚动的次数
        base_mat = np.atleast_2d(Image.open(r'D:\code\FrontDotAutomate_30\screenshort\screenshort.png'))  # 打开截图并转为二维矩阵

        for i in range(n):
            driver.execute_script(f'document.documentElement.scrollTop={window_height * (i + 1)};')
            sleep(.5)
            driver.save_screenshot(fr'D:\code\FrontDotAutomate_30\screenshort\screenshort_{i}.png')  # 保存截图
            mat = np.atleast_2d(Image.open(fr'D:\code\FrontDotAutomate_30\screenshort\screenshort_{i}.png'))  # 打开截图并转为二维矩阵
            base_mat = np.append(base_mat, mat, axis=0)  # 拼接图片的二维矩阵

        file_path = short_dir+query+'.png'
        print(file_path)
        Image.fromarray(base_mat).save(file_path)

    driver.quit()

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值