我查阅了Selenium python文档,它允许用户对元素进行屏幕截图。我尝试了下面的代码,它适用于小页面(打印时大约3-4个实际的A4页面):
代码语言:javascript复制from selenium.webdriver import FirefoxOptions
firefox_profile = webdriver.FirefoxProfile()
firefox_profile.set_preference("browser.privatebrowsing.autostart", True)
# Configure options for Firefox webdriver
options = FirefoxOptions()
options.add_argument('--headless')
# Initialise Firefox webdriver
driver = webdriver.Firefox(firefox_profile=firefox_profile, options=options)
driver.maximize_window()
driver.get(url)
driver.find_element_by_tag_name("body").screenshot("career.png")
driver.close()当我在url="https://waitbutwhy.com/2020/03/my-morning.html"上试用它时,它给出了整个页面的截图,不出所料。但是当我尝试使用url="https://waitbutwhy.com/2018/04/picking-career.html"时,几乎一半的页面没有在屏幕截图中呈现(图像太大了,不能在这里上传),即使"body“标签在原始的HTML中一直延伸到下面。
我尝试过使用隐式和显式等待(设置为10s,这足以让浏览器加载所有内容,包括评论和讨论区),但这并没有改善屏幕截图功能。为了确保selenium确实正确地加载了网页,我尝试在没有headless标志的情况下加载,一旦网页完全加载,我就运行driver.find_element_by_tag_name("body").screenshot("career.png")。屏幕截图又是半空的。
看起来screenshot方法可能有一些内存限制(尽管我找不到),或者screenshot方法本身背后的逻辑是有缺陷的。不过我还是想不通。我只想截取整个"body“元素的屏幕截图(最好是在headless环境中)。