当前位置: 首页 > 知识库问答 >
问题:

使用python selenium和Firefox或Chrome headless进行整页截图

蓬琦
2023-03-14

这篇帖子和这篇有关:

Python selenium屏幕捕获未获取整个页面

driver = webdriver.PhantomJS()    
driver.maximize_window()
driver.get('http://www.angelfire.com/super/badwebs/')  
scheight = .1
while scheight < 9.9:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight/%s);" % scheight)
    scheight += .01        
driver.save_screenshot('angelfire_phantomjs.png')
...
UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
from selenium import webdriver

firefox_options = webdriver.FirefoxOptions()
firefox_options.set_headless() 
firefox_driver = webdriver.Firefox(firefox_options=firefox_options)

firefox_driver.get('http://www.angelfire.com/super/badwebs/')  
scheight = .1
while scheight < 9.9:
    firefox_driver.execute_script("window.scrollTo(0, document.body.scrollHeight/%s);" % scheight)
    scheight += .01        
firefox_driver.save_screenshot('angelfire_firefox.png')

但这似乎不是一个通用的解决方案,它要复杂得多。)

共有1个答案

龙高超
2023-03-14

这是我想出的方法,采取任何长度的网站的完美截图。它利用了无头浏览器可以在运行前将窗口设置为任何大小的事实,挑战是在运行无头浏览器之前获得滚动高度。这是唯一的回撤,运行该网站两次。

from selenium import webdriver
from PIL import Image
from selenium.webdriver.chrome.options import Options
import time

url = 'any website url'

#run first time to get scrollHeight
driver = webdriver.Chrome()
driver.get(url)
#pause 3 second to let page load
time.sleep(3)
#get scroll Height
height = driver.execute_script("return Math.max( document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight )")
print(height)
#close browser
driver.close()

#Open another headless browser with height extracted above
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument(f"--window-size=1920,{height}")
chrome_options.add_argument("--hide-scrollbars")
driver = webdriver.Chrome(options=chrome_options)

driver.get(url)
#pause 3 second to let page loads
time.sleep(3)
#save screenshot
driver.save_screenshot('screen_shot.png')
driver.close()
 类似资料:
  • 我在VPS的Xvfb上运行火狐。我想做的是对页面进行全页截图。 我可以使用以下方法将Firefox重定向到特定页面 并使用ImageMagick进行屏幕截图(在X内部) 问题是,大部分页面需要滚动,我无法事先知道高度。 另一种方法是挑一个非常大的高度(像4000px)然后对图像进行处理,去掉无用的部分。但那是不必要的处理。 我发现了许多Firefox插件,但我正在寻找一个可以使用Shell命令行编

  • 我正试图使用selenium和chromedriver进行全页截图,但我得到的是这一半截图。我尝试过其他方法,但到目前为止,只有这一个工作,它只需要半页截图。 任何人都可以用另一个技巧来修复这个问题,也可以附加输出结果。

  • 我在浏览器栈上使用Selenium网络驱动程序自动测试,当我在Firefox和IE上截图时,它会截图整个页面。但是由于我的页面包含一个很长的列表——屏幕截图太长了,因此它不是一个清晰的图像,很难看出页面的行为是否正确。我需要它像Chrome一样精确:仅显示视口宽度和高度的屏幕截图。在Firefox和IE上可能吗? 我使用的代码:

  • 在尝试了各种方法之后...我偶然发现了这个页面,用chromedriver、selenium和Python进行了全页截图。 原始代码在这里。(我在下面的帖子中复制了代码) 它使用PIL,它的工作很好!然而,有一个问题...也就是说,它捕获固定的标题和整个页面的重复,并且在页面更改期间遗漏页面的某些部分。获取截图的示例url: Util.Py

  • 我知道这在以前是不可能的,但现在有了以下更新: 现在有可能在Java中使用Selenium吗?

  • 本文向大家介绍如何使用js来截图?怎样截可见区域和整个页面?相关面试题,主要包含被问及如何使用js来截图?怎样截可见区域和整个页面?时的应答技巧和注意事项,需要的朋友参考一下 可以基于html2canvas 和 canvas2image 两个第三方类实现截图。 如果打算截取整个页面 可以直接设定 如果打算截取可见区域 额外设置一下宽高即可