【问题标题】:Take a screenshot of open website in python script用python脚本截取打开的网站
【发布时间】:2012-09-15 19:31:33
【问题描述】:

我需要编写一个打开网站的 python 脚本,当网站完全打开时,它会截取打开的网站的屏幕截图。

我是这样写的:

import webbrowser
import wx

wx.App()
link = "http://stackoverflow.com/questions"
webbrowser.get('firefox %s').open_new_tab(link)
screen = wx.ScreenDC()
size = screen.GetSize()
bmp = wx.EmptyBitmap(size[0], size[1])
mem = wx.MemoryDC(bmp)
mem.Blit(0, 0, size[0], size[1], screen, 0, 0)
del mem
bmp.SaveFile('screenshot.png', wx.BITMAP_TYPE_PNG)

它只会在 Firefox 中打开一个新标签,但不会对其进行截图:(

我希望解决方案是跨平台的。感谢您的帮助:)

编辑:

这里的主要问题是脚本必须在我的网页完全打开之前拍照。如何解决这个问题?

【问题讨论】:

  • 我不知道你的webbrowser 模块能做什么。如果没有从浏览器到控制 Python 脚本的任何类型的回调表明页面加载已完成,那么您只剩下一个选择:等待一个恒定的时间并使其足够长:例如time.sleep(5).

标签: python browser screenshot screensaver wxwidgets


【解决方案1】:

这个解决方案是相当跨平台的,但如果你想在桌面上显示一些打开的网页,带有菜单/工具栏等......这不是你想要的。

您可以使用SeleniumHQ 自动化您选择的浏览器,让该浏览器渲染页面,然后获取渲染页面的完整图像 - 即,不仅仅是屏幕上显示的页面部分的屏幕截图.然后你可以相应地裁剪它。

【讨论】:

    【解决方案2】:

    我相信您需要针对不同操作系统的不同解决方案。使用sys.platform 找出您在哪个平台上。其余的你必须自己弄清楚,但快速的互联网搜索显示:

    • 在 Linux 系统上,您可以按照此处所述截取屏幕截图:

    Take a screenshot via a python script. [Linux]

    • 在 Windows 系统上,您的解决方案可以基于以下答案:

    Fastest way to take a screenshot with python on windows

    • 在 Mac 系统上,这将有所帮助:

    Take screenshot in Python on Mac OS X

    【讨论】:

      【解决方案3】:

      根据this question,你应该可以使用ImageGrab截图。由于 ImageGrab 使用 PIL,这应该是跨平台的。 Here 是一些示例代码,可帮助您上路

      希望对你有帮助

      【讨论】:

      • 好的,我会尝试,但仍然存在我的脚本在我的网页完全打开之前截取屏幕截图的问题:(
      • 看[this question])stackoverflow.com/questions/3636008/…),它谈到了等待网页完全加载。您可能需要使用硒
      猜你喜欢
      • 2021-01-17
      • 2022-01-13
      • 2014-09-16
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 2023-01-14
      • 2015-05-09
      • 2020-06-18
      相关资源
      最近更新 更多