mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Add API to start load and wait till DOM is ready
This commit is contained in:
parent
a671413989
commit
64431fa9fb
@ -92,6 +92,10 @@ class WebPage(QWebPage): # {{{
|
||||
def on_unsupported_content(self, reply):
|
||||
self.log.warn('Unsupported content, ignoring: %s'%reply.url())
|
||||
|
||||
@property
|
||||
def ready_state(self):
|
||||
return unicode(self.mainFrame().evaluateJavaScript('document.readyState').toString())
|
||||
|
||||
# }}}
|
||||
|
||||
class ProxyFactory(QNetworkProxyFactory): # {{{
|
||||
@ -368,6 +372,29 @@ class Browser(QObject, FormsMixin):
|
||||
self.page.mainFrame().load(QUrl(url))
|
||||
return self._wait_for_load(timeout, url)
|
||||
|
||||
@property
|
||||
def dom_ready(self):
|
||||
return self.page.ready_state in {'complete', 'interactive'}
|
||||
|
||||
def wait_till_dom_ready(self, timeout=30.0, url=None):
|
||||
start_time = time.time()
|
||||
while not self.dom_ready:
|
||||
if time.time() - start_time > timeout:
|
||||
raise Timeout('Loading of %r took longer than %d seconds'%(
|
||||
url, timeout))
|
||||
self.run_for_a_time(0.1)
|
||||
|
||||
def start_load(self, url, timeout=30.0):
|
||||
'''
|
||||
Start the loading of the page at url and return once the DOM is ready,
|
||||
sub-resources such as scripts/stylesheets/images/etc. may not have all
|
||||
loaded.
|
||||
'''
|
||||
self.current_form = None
|
||||
self.page.mainFrame().load(QUrl(url))
|
||||
self.run_for_a_time(0.01)
|
||||
self.wait_till_dom_ready(timeout=timeout, url=url)
|
||||
|
||||
def click(self, qwe_or_selector, wait_for_load=True, ajax_replies=0, timeout=30.0):
|
||||
'''
|
||||
Click the :class:`QWebElement` pointed to by qwe_or_selector.
|
||||
|
Loading…
x
Reference in New Issue
Block a user