Selenium Webdriver Python元素截图无法正常工作

3
我查阅了Selenium Python文档,它允许我们对元素进行截图。我尝试了以下代码,并且对于小型页面(当您打印它们时大约3-4个实际的A4页面)它是有效的:
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"时,页面的近一半在截图中没有被呈现出来(图片太大无法上传),即使原始HTML中的"body"标签确实延伸到底部。
我已经尝试使用隐式和显式等待(设置为10秒,这对于浏览器加载所有内容、评论和讨论部分已足够),但这并没有改进截图功能。只是为了确保selenium确实正常加载了网页,我尝试了不带headless标志的加载,一旦网页完全加载,我就运行了driver.find_element_by_tag_name("body").screenshot("career.png")。截图再次是部分空白的。
看起来screenshot方法可能有一些内存限制(虽然我找不到任何限制),或者screenshot方法本身的逻辑有缺陷。虽然我不能确定。我只想简单地截取整个"body"元素的屏幕截图(最好在headless环境下)。

您附加了2个相同的URL。请分享页面以便我们查找问题。 - Aliaksandr Plekhau
Done @AliaksandrPlekhau - Alex Solanki
1个回答

1
您可以尝试这段代码,只需使用命令提示符安装一个包,命令为pip install Selenium-Screenshot
import time
from selenium import webdriver
from Screenshot import Screenshot_Clipping


driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("https://waitbutwhy.com/2020/03/my-morning.html")
obj=Screenshot_Clipping.Screenshot()
img_loc=obj.full_Screenshot(driver, save_path=r'.', image_name='capture.png')
print(img_loc)

time.sleep(5)
driver.close()

结果出来后,你只需要放大保存的截图即可。

capture.png

希望这对你有用!

截取 https://waitbutwhy.com/2018/04/picking-career.html 的屏幕截图需要_很多_时间。 - Alex Solanki
我也检查了质量。它不是很锐利,而且是实际HTML的扁平化版本。 - Alex Solanki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接