From e9b4130fb4e5f5f1c1aed2f52ce97453dadbc2df Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Wed, 8 Jan 2014 14:05:40 -0500 Subject: Initial commit --- chat_iface.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 chat_iface.py (limited to 'chat_iface.py') diff --git a/chat_iface.py b/chat_iface.py new file mode 100644 index 0000000..c1fbc29 --- /dev/null +++ b/chat_iface.py @@ -0,0 +1,71 @@ +from __future__ import unicode_literals +import logging +import selenium.webdriver + +# set WebElement hash to default to use set(x) +selenium.webdriver.remote.webelement.WebElement.__hash__ = lambda self: hash(self.id) + +def diff(a, b): + b = set(b) + return [aa for aa in a if aa not in b] + +logger = logging.getLogger('rschat.' + __name__) + +class ChatInterface(): + def __init__(self, chat_type, username, password): + self.chat_type = chat_type + self.username = username + self.password = password + self.browser = None + + def __enter__(self): + logger.info('Starting webdriver') + options = selenium.webdriver.ChromeOptions() + options.add_argument('--disable-file-system') + + self.browser = selenium.webdriver.Chrome('/usr/lib64/chromium-browser/chromedriver', chrome_options=options) + + self.browser.implicitly_wait(30) + + logger.debug('Navigating to companion app') + self.browser.get('http://www.runescape.com/companion/comapp.ws') + + logger.debug('Switching to iframe') + self.browser.switch_to_frame(self.browser.find_element_by_tag_name('iframe')) + +# login + logger.debug('Logging in as %s' % self.username) + self.browser.find_element_by_id('username').send_keys(self.username) + self.browser.find_element_by_id('password').send_keys(self.password) + self.browser.find_element_by_tag_name('form').submit() + +# decline remember login + logger.debug('Declining remember login') + self.browser.find_element_by_partial_link_text('No').click() + + logger.debug('Switching to %s chat' % self.chat_type) + self.browser.find_element_by_css_selector('.chat-nav .icon-%schat' % self.chat_type).click() + + self.browser.implicitly_wait(0) + + return self + + lastmsgs = [] + + def send(self, line): + self.browser.find_element_by_id('message').send_keys(line) + self.browser.find_element_by_tag_name('form').submit() + + def poll(self): + try: + allmsgs = self.browser.find_elements_by_css_selector('#content-%s-chat .message:not(.my-message) .message-content' % self.chat_type) + newmsgs = diff(allmsgs, self.lastmsgs) + + self.lastmsgs = allmsgs + + return [(e.find_element_by_class_name('author').text.replace(' -', ''), e.find_element_by_tag_name('p').text) for e in newmsgs] + except selenium.webdriver.common.exceptions.NoSuchElementException: + pass + + def __exit__(self, *_): + self.browser.quit() -- cgit v1.2.3-54-g00ecf