def try_login(self, username, password, timeout=300): try_login_js = brozzler.jinja2_environment().get_template( 'try-login.js.j2').render(username=username, password=password) self.websock_thread.got_page_load_event = None self.send_to_chrome( method='Runtime.evaluate', suppress_logging=True, params={'expression': try_login_js}) # wait for tryLogin to finish trying (should be very very quick) start = time.time() while True: self.websock_thread.expect_result(self._command_id.peek()) msg_id = self.send_to_chrome( method='Runtime.evaluate', params={'expression': 'try { __brzl_tryLoginState } catch (e) { "maybe-submitted-form" }'}) try: self._wait_for( lambda: self.websock_thread.received_result(msg_id), timeout=5) msg = self.websock_thread.pop_result(msg_id) if (msg and 'result' in msg and 'result' in msg['result']): result = msg['result']['result']['value'] if result == 'login-form-not-found': # we're done return elif result in ('submitted-form', 'maybe-submitted-form'): # wait for page load event below self.logger.info( 'submitted a login form, waiting for another ' 'page load event') break # else try again to get __brzl_tryLoginState except BrowsingTimeout: pass if time.time() - start > 30: raise BrowsingException( 'timed out trying to check if tryLogin finished') # if we get here, we submitted a form, now we wait for another page # load event self._wait_for( lambda: self.websock_thread.got_page_load_event, timeout=timeout)
def extract_outlinks(self, timeout=60): self.logger.info('extracting outlinks') self.websock_thread.expect_result(self._command_id.peek()) js = brozzler.jinja2_environment().get_template( 'extract-outlinks.js').render() msg_id = self.send_to_chrome( method='Runtime.evaluate', params={'expression': js}) self._wait_for( lambda: self.websock_thread.received_result(msg_id), timeout=timeout) message = self.websock_thread.pop_result(msg_id) if ('result' in message and 'result' in message['result'] and 'value' in message['result']['result']): if message['result']['result']['value']: return frozenset( message['result']['result']['value'].split('\n')) else: # no links found return frozenset() else: self.logger.error( 'problem extracting outlinks, result message: %s', message) return frozenset()