2012-09-24 68 views
2

我需要编写一个打开网站的python脚本,当网站完全打开时,它会截取打开的网站截图。在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,但它不采取它的屏幕截图:(

我想要的解决方案是跨平台的感谢。任何帮助:)

编辑:

主要这里的问题是,SCR ipt musnt拍照之前,我的网页完全打开。如何解决这个问题?

+1

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

回答

1

该解决方案是相当跨平台的,但如果你想带一点网页在开桌面与菜单/工具栏等...这不是你想要的。

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

+0

我会看看这个,它看起来好了,谢谢 – Katie

1

根据this question,您应该可以使用ImageGrab拍摄截图。由于ImageGrab使用PIL,这应该是跨平台的。 Here是一些示例代码,让你对你的方式

希望这有助于

+0

好吧我会尝试,但仍然存在的问题,我的脚本截图之前,我的网页完全打开:( – Katie

+1

看看[这个问题])http:// stackoverflow。COM /问题/ 3636008 /等待换网页到负载完全-使用的Python),其中谈到等待网页完全加载。您可能需要使用硒 – inspectorG4dget

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