2013-10-06 15 views
5

Miałem wrażenie, że za pomocą przeglądarki bez nagłówka przeglądarki internetowej za pomocą PyQT automatycznie otrzymam kod html dla każdego adresu URL nawet z ciężkim kodem JS. Ale widzę to tylko częściowo. Porównuję to ze stroną, którą otrzymuję, kiedy zapisuję stronę z okna firefoxa.Strona HTML znacznie się różniła, gdy używano implementacji bezgłowego webkita przy użyciu PyQT

Używam następujący kod -

class JabbaWebkit(QWebPage): 
    # 'html' is a class variable 

    def __init__(self, url, wait, app, parent=None): 
     super(JabbaWebkit, self).__init__(parent) 
     JabbaWebkit.html = '' 

     if wait: 
      QTimer.singleShot(wait * SEC, app.quit) 
     else: 
      self.loadFinished.connect(app.quit) 

     self.mainFrame().load(QUrl(url)) 

    def save(self): 
     JabbaWebkit.html = self.mainFrame().toHtml() 

    def userAgentForUrl(self, url): 
     return USER_AGENT 


    def get_page(url, wait=None): 
     # here is the trick how to call it several times 
     app = QApplication.instance() # checks if QApplication already exists 

     if not app: # create QApplication if it doesnt exist 
      app = QApplication(sys.argv) 
     # 
     form = JabbaWebkit(url, wait, app) 
     app.aboutToQuit.connect(form.save) 
     app.exec_() 
     return JabbaWebkit.html 

Czy ktoś zobaczyć coś oczywiście złego kodu?

Po uruchomieniu kodu przez kilka adresów URL, tutaj jest jeden znalazłem, który pokazuje problemy używam do dość wyraźnie - http://www.chilis.com/EN/Pages/menu.aspx

Dzięki za wszelkie wskazówki.

+0

użytku phantom.js. To jest najlepsze dla tego rodzaju pracy. – BigSack

Odpowiedz

1

Strona ma kod ajax, po jej zakończeniu wciąż potrzebuje trochę czasu, aby zaktualizować stronę za pomocą ajax. Ale kod zostanie zamknięty po zakończeniu ładowania.

Należy dodać kod tak, aby poczekać jakiś czas i przetwarzać zdarzenia w WebKit:

for i in range(200): #wait 2 seconds 
    app.processEvents() 
    time.sleep(0.01)