Selenium webdriver python元素屏幕截图无法正常工作
Posted
技术标签:
【中文标题】Selenium webdriver python元素屏幕截图无法正常工作【英文标题】:Selenium webdriver python element screenshot not working properly 【发布时间】:2020-12-30 14:06:49 【问题描述】:我查阅了 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"
尝试它时,几乎一半的页面没有呈现在屏幕截图中(图像太大,无法在此处上传),即使“body”标签确实在原始 HTML 中一直向下延伸。
我尝试过同时使用隐式和显式等待(设置为 10 秒,这足以让浏览器加载所有内容、包括 cmets 和讨论部分),但这并没有改善屏幕截图功能。为了确保 selenium 实际上正确加载了网页,我尝试在没有 headless
标志的情况下加载,一旦网页完全加载,我运行 driver.find_element_by_tag_name("body").screenshot("career.png")
。屏幕截图又是半空白。
似乎screenshot
方法上可能存在一些内存限制(虽然我找不到),或者screenshot
方法本身背后的逻辑存在缺陷。我想不通。我只是想截取整个“body”元素的屏幕截图(最好在headless
环境中)。
【问题讨论】:
您附加了 2 个相同的网址。请分享您遇到问题的页面。 完成@AliaksandrPlekau 【参考方案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()
Outcome/Result出来就像,你只需要缩放保存的截图
希望这对你有用!
【讨论】:
对waitbutwhy.com/2018/04/picking-career.html进行截图需要很多时间 我也检查了质量。它不是很清晰,是实际 HTML 的扁平化版本以上是关于Selenium webdriver python元素屏幕截图无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
[python] python+selenium+webdriver