[PyQt] Random crashes in QWebView
Kay D
dtc.kay at gmail.com
Sat Apr 3 15:00:44 BST 2010
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 <patx44 at gmail.com> 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 <dtc.kay at gmail.com> 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 PyQt at riverbankcomputing.com
>> http://www.riverbankcomputing.com/mailman/listinfo/pyqt
>>
>
>
>
> --
> patx - http://patx.me/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20100403/e932ce43/attachment.html>
More information about the PyQt
mailing list