2015-06-11 96 views
0

所以我想用python腳本把一個網站的截圖:以網站的截圖與蟒蛇導致空白頁

#! /usr/bin/python 

import sys 
import time 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import * 

class Screenshot(QWebView): 
    def __init__(self): 
     self.app = QApplication(sys.argv) 
     QWebView.__init__(self) 
     self._loaded = False 
     self.loadFinished.connect(self._loadFinished) 

    def capture(self, url, output_file): 
     self.load(QUrl(url)) 
     self.wait_load() 
     time.sleep(120) 
     # set to webpage size 
     frame = self.page().mainFrame() 
     self.page().setViewportSize(frame.contentsSize()) 
     # render image 
     image = QImage(self.page().viewportSize(), QImage.Format_ARGB32) 
     painter = QPainter(image) 
     frame.render(painter) 
     painter.end() 
#  print 'saving', output_file 
     image.save(output_file) 

    def wait_load(self, delay=0): 
     # process app events until page loaded 
     while not self._loaded: 
      self.app.processEvents() 
      time.sleep(delay) 
     self._loaded = False 

    def _loadFinished(self, result): 
     self._loaded = True 

    s = Screenshot() 
    s.capture('http://csgo-stats.com/maschs/', 'csgo-stats.png') 

它幾乎每一頁上工作,但在現場CSGO-統計.com/maschs(這是我的個人資料頁面),它只是一個空白頁面,沒有頁面上的信息。當我在瀏覽器中打開該頁面時,需要幾秒鐘才能加載,並且可以正確顯示所有內容。結果是這樣的:csgo-stats

我使用的樹莓派和Python 2.7

+1

您是否考慮過使用「Steam Web API」以官方認可的方式檢索信息而不是文字屏幕刮擦? –

+0

這將是一個解決方案,但我沒有找到任何完整的python steam web api解決方案,並且該網站已經很好地顯示它。或者有沒有簡單的方法來使用Python的「Steam Web API」? – user3745172

回答

0

您的瀏覽器界面可以觸發「網頁加載」,當它認爲,所有內容已經解決,所有的初始Javascript代碼事件已經運行。

您嘗試捕獲的頁面可能會使用基於加載時發出的異步請求的附加數據填充內容。

你必須弄清楚如何等待足夠的事件和狀態,或者只是一味等待,直到你認爲它已經被充分更新。

+0

另外:可以通過在頁面加載時打開「開發人員工具」的「網絡」選項卡來驗證此情況,然後比較「頁面加載」事件觸發時間和可以看到整個頁面的時間。 – Katana314

+0

只是等待沒有幫助。它似乎根本沒有加載。我可能只是試着用官方蒸汽網頁API來運氣。 – user3745172