It'll crash at random point 6 out of 100 times on my Ubuntu desktop. It's not supposed to crash, so I'm asking what I'm doing wrong.
On Sat, Apr 3, 2010 at 3:05 AM, patx <[email protected]> wrote: > not really helping just a question to the author: > > it crashes right away? is it supposed to or? > > On Fri, Apr 2, 2010 at 6:04 PM, Kay D <[email protected]> wrote: > >> Hi Everyone >> >> I've created a python wrapper for qt browser, but if I run it many times, >> it'll crash in few cases with segfaults like following: >> [ 9939.720253] python[13090] general protection ip:7f43c853c96e >> sp:7fffbe6d0de0 error:0 in QtCore.so[7f43c8406000+188000] >> What's wrong with the code? Timers? Javascript? Something else? Or it's >> just unstable Qt browser? >> >> Ubuntu 9.10 (karmic); PyQt version 4.6-1; Qt 4.5.3really4.5.2-0ubuntu1 >> ---------------------------------------------------- wrapper >> --------------------------------------------------------------- >> import logging >> from PyQt4.QtCore import SIGNAL, QObject, QUrl, QTimer, QString >> from PyQt4.QtGui import QApplication >> from PyQt4.QtWebKit import QWebView, QWebPage, QWebSettings >> >> class WebKitPage(QWebPage): >> def __init__(self, user_agent): >> QWebPage.__init__(self) >> self.user_agent = user_agent >> def userAgentForUrl(self, url): >> return self.user_agent >> def javaScriptConsoleMessage(self, message, line, source): >> logging.info("WebKitPage > js line %s at %s, message %s", line, >> source, message) >> >> class WebKitBrowser: >> def __init__(self, parsers): >> self.app = QApplication([]) >> self.url = self.timer = None >> self.parsers = parsers >> self.page = WebKitPage("Test user agent") >> self.browser = QWebView() >> QObject.connect(self.browser, SIGNAL("loadFinished(bool)"), >> self.load_finished) >> self.browser.get_js_str = self.get_js_str >> self.browser.show() >> self.browser.resize(800,600) >> self.browser.setPage(self.page) >> self.browser.settings().setAttribute(QWebSettings.AutoLoadImages, >> False) >> >> def get_js_str(self, frame, js, arg = None): >> jsqs = QString(js) >> if arg != None: jsqs = jsqs.arg(arg) >> return unicode(frame.evaluateJavaScript(jsqs).toString()) >> >> def timer_shot(self): >> self.timer_stop() >> self.browser.stop() >> >> def timer_start(self, timeout): >> self.timer = QTimer() >> QObject.connect(self.timer, SIGNAL("timeout()"), self.timer_shot) >> self.timer.start(timeout * 1000) >> >> def timer_stop(self): >> if self.timer: >> self.timer.stop() >> self.timer = None >> >> def load_finished(self, stat): >> logging.info("WebKitBrowser > Load finished") >> self.timer_stop() >> self.status = stat and "success" or "timeout" >> for parser in self.parsers: >> parser.run(self.browser) >> self.real_url = >> self.browser.get_js_str(self.browser.page().mainFrame(), "location.href") >> logging.info("WebKitBrowser > Status %s, Real url %s", >> self.status, self.real_url) >> self.app.exit() >> >> def get(self, url, timeout = 60): >> logging.info("WebKitBrowser > Loading %s", url) >> self.browser.stop() >> self.status = "loading" >> self.timer_start(timeout) >> self.browser.load(QUrl(url)) >> self.app.exec_() >> return self.status >> >> class LinkParser: >> def extract_links(self, frame): >> frame.evaluateJavaScript("var anchors = >> document.getElementsByTagName('a');") >> count, ok = frame.evaluateJavaScript("anchors.length;").toInt() >> for i in range(0, count): >> logging.info("LinkParser > %s", >> self.browser.get_js_str(frame, "anchors[%1].href", i)) >> >> def run(self, browser): >> self.browser = browser >> self.extract_links(self.browser.page().mainFrame()) >> for frame in self.browser.page().mainFrame().childFrames(): >> self.extract_links(frame) >> >> if __name__ == "__main__": >> logging.basicConfig(level=logging.DEBUG) >> b = WebKitBrowser([ LinkParser() ]) >> b.get("http://google.com/") >> b.get("http://youtube.com/", 1) >> b.get("http://google.com/") >> >> >> _______________________________________________ >> PyQt mailing list [email protected] >> http://www.riverbankcomputing.com/mailman/listinfo/pyqt >> > > > > -- > patx - http://patx.me/ >
_______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
