Beispiel #1
0
    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)
Beispiel #2
0
 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()