我試圖監視通過JavaScript生成的網站上的元素。下載一個javascript修改過的頁面的問題已經被處理過了,我借用了下面的代碼來解決PyQt的問題。如何*有效*監控用JavaScript修改的網頁?
但是,當我將此代碼設置爲每20秒運行一次時,我的網絡流量平均下降了5KB/s,達到70KB/s。實際保存的頁面只有80KB,但是JavaScript很重。
6GB一天是不合理的,我的ISP有數據限制,我已經行了。
有沒有辦法修改這段代碼,例如,它只執行對應於頁面上特定元素的javascript?如果是這樣,我將如何去弄清楚我需要執行什麼?這會對我看到的網絡流量產生重大影響嗎?
或者,我應該怎麼做呢?我考慮做一個Chrome擴展,因爲Chrome已經爲我處理了JavaScript,但是我必須弄清楚如何將它與我的其他項目集成,這對我來說是全新的領域。如果有更好的方法,我寧願那樣做。
#Borrowed from http://stackoverflow.com/questions/19161737/cannot-add-custom-request-headers-in-pyqt4
#which is borrowed from http://blog.motane.lu/2009/07/07/downloading-a-pages-content-with-python-and-webkit/
import sys, signal
from PyQt4.QtCore import QUrl
from PyQt4.QtGui import QApplication
from PyQt4.QtWebKit import QWebPage
from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
cookie = ''#snipped, the cookie I have to send is about as long as this bit of code...
class MyNetworkAccessManager(QNetworkAccessManager):
def __init__(self, url):
QNetworkAccessManager.__init__(self)
request = QNetworkRequest(QUrl(url))
self.reply = self.get(request)
def createRequest(self, operation, request, data):
request.setRawHeader('User-Agent', 'Mozilla/5.0')
request.setRawHeader("Cookie",cookie);
return QNetworkAccessManager.createRequest(self, operation, request, data)
class Crawler(QWebPage):
def __init__(self, url, file):
QWebPage.__init__(self)
self._url = url
self._file = file
self.manager = MyNetworkAccessManager(url)
self.setNetworkAccessManager(self.manager)
def crawl(self):
signal.signal(signal.SIGINT, signal.SIG_DFL)
self.loadFinished.connect(self._finished_loading)
self.mainFrame().load(QUrl(self._url))
def _finished_loading(self, result):
file = open(self._file, 'w')
file.write(self.mainFrame().toHtml())
file.close()
exit(0)
def main(url,file):
app = QApplication([url,file])
crawler = Crawler(url, file)
crawler.crawl()
sys.exit(app.exec_())
你的目標是什麼?你想收集什麼樣的指標? – djna
網頁上有一個文字字符串,它會在四個不同的字符串之間週期性地更改,我想在程序的其餘部分發生變化時報告它,以及它是四個字符串中的哪一個。 – Briana
要清楚,您是否有效地想每20秒捕獲一次網站狀態(由JavaScript修改)?這勢必造成大量流量。 – halfer