繁体   English   中英

使用python硒和Firefox或Chrome浏览器获取整个页面的截图

[英]Taking screenshot of whole page with python selenium and Firefox or Chrome headless

这篇帖子与此相关:

Python Selenium屏幕截图无法获取整个页面

PhantomsJS的解决方案似乎正在起作用:

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')

但是,该解决方案来自2014年,同时不建议使用PhantomJS。 我正在收到此错误消息:

...
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 '

如果我尝试像这样无头地适应Firefox:

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')

截屏,但不截屏。

有什么想法如何使其与Firefox或Chrome浏览器兼容吗?

(PS我也发现了这篇文章:

使用Selenium Python拍摄整页的屏幕快照(chromedriver)

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

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

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM