Skip to content

Instantly share code, notes, and snippets.

@gabrielfalcao
Created August 16, 2010 20:03
Show Gist options
  • Save gabrielfalcao/527629 to your computer and use it in GitHub Desktop.
Save gabrielfalcao/527629 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# <JsshDriver - drive firefox with js>
# Copyright (C) <2010> Gabriel Falcão <[email protected]>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following
# conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
import re
import telnetlib
class JsshDriver:
COMMAND_PROMPT = "\n> "
def __init__(self, host=None, port=9997, telnetklass=telnetlib.Telnet):
self.host = host
self.port = port
self.tn = telnetklass(host,port)
self.init()
def open(self,host,port=9997):
self.tn.close()
self.host = host
self.port = port
self.tn.open(host,port)
self.init()
def init(self):
if not self.tn.get_socket():
return
self.tn.read_until(JsshDriver.COMMAND_PROMPT)
self.send_command("setProtocol('synchronous')")
def send_command(self,command):
self.tn.write(command + "\n")
print (command + "\n")
return self.tn.read_until(JsshDriver.COMMAND_PROMPT)
def send_quit(self):
self.tn.write("quit()\n")
return self.tn.read_all()
def get_variable_value(self,variable):
jssh_response = self.send_command ('print(' + variable + ')')
m = re.compile(r"\[(?P<len>\d+)](?P<rest>.*)", re.DOTALL).search(jssh_response)
return m.group('rest')[0:int(m.group('len'))]
def get_innerHTML_from_URL(self,url):
self.send_command ('var browser = getWindows()[0].getBrowser()')
self.send_command ('browser.loadURI("' + url + '")')
self.send_command ('var document = browser.contentDocument')
self.send_command ('var window = browser.contentWindow')
return self.get_variable_value('document.documentElement.innerHTML')
if __name__ == '__main__':
browser = JsshDriver('localhost', 9997, telnetlib.Telnet)
html = browser.get_innerHTML_from_URL('http://github.com')
from lxml import html as lhtml
dom = lhtml.fromstring(html)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment