Advertisement
Guest User

facebook login script

a guest
Oct 10th, 2013
964
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.28 KB | None | 0 0
  1. # coding=utf-8
  2. import sys
  3. import os
  4. import traceback
  5. from selenium import webdriver
  6. from selenium.webdriver.common.action_chains import ActionChains
  7. from selenium.webdriver.common.by import By
  8. from selenium.webdriver.support.ui import WebDriverWait
  9. from selenium.webdriver.support import expected_conditions as ec
  10. from selenium.common.exceptions import TimeoutException, NoSuchElementException, ElementNotVisibleException
  11.  
  12.  
  13. class NotLoggedInError(Exception):
  14.     pass
  15.  
  16.  
  17. class Facebook(object):
  18.  
  19.     def __init__(self, login, password):
  20.         self.login = login
  21.         self.password = password
  22.         self.nick = None
  23.         self.normalized_nick = None
  24.         self.avatar_image = "/Users/foreigner/Downloads/avatar.jpg"
  25.         self.login_url = u"https://www.facebook.com/login.php"
  26.         self.update_url = u"https://www.facebook.com/{0}?sk=info&edit=eduwork"
  27.         self.cookie = None
  28.         self.driver = webdriver.Firefox()
  29.  
  30.     def log_in(self):
  31.         self.driver.get(self.login_url)
  32.         self.driver.find_element(By.NAME, u"email").send_keys(self.login)
  33.         self.driver.find_element(By.NAME, u"pass").send_keys(self.password)
  34.         self.driver.find_element(By.NAME, u"login").submit()
  35.  
  36.         def normalize_nick(text):
  37.             nick = '.'.join(text.split(' '))
  38.             return nick.lower()
  39.  
  40.         try:
  41.             WebDriverWait(self.driver, 10).until(ec.presence_of_element_located((By.ID, u"navHome")))
  42.             self.cookie = self.driver.get_cookies()
  43.             self.nick = self.driver.find_element(By.CLASS_NAME, u"headerTinymanName").text
  44.             self.normalized_nick = normalize_nick(self.nick)
  45.             self.update_url = self.update_url.format(self.normalized_nick)
  46.         except TimeoutException as e:
  47.             print "Request Timeout. {0}".format(e.message)
  48.         except TypeError as te:
  49.             print 'Error occurred. {0}'.format(te.message)
  50.             import traceback
  51.             type_, value_, trace_ = sys.exc_info()
  52.             print traceback.format_tb(trace_)
  53.         except:
  54.             print "Something went wrong. {0}".format(sys.exc_info()[0])
  55.  
  56.     def _stack_trace(self, exc_info):
  57.         """
  58.  
  59.        :param exc_info:
  60.        """
  61.         _type, _value, _trace = exc_info
  62.         print "Caught exception:\n\t{0}\n\t{1}\nStacktrace: {2}".format(_type, _value, traceback.format_tb(_trace))
  63.  
  64.     def _update_avatar(self):
  65.         if not self.cookie:
  66.             raise NotLoggedInError("No cookies found. Possible Log in failure")
  67.         try:
  68.             if not os.path.exists(self.avatar_image):
  69.                 raise IOError("Avatar file not found")
  70.             self.driver.find_element(By.CLASS_NAME, u"sx_53a53c").click()
  71.             WebDriverWait(self.driver, 10).until(ec.presence_of_element_located((By.CLASS_NAME, u"fbTimelineSelectorFileInput")))
  72.             WebDriverWait(self.driver, 10).until(ec.presence_of_element_located((By.NAME, u"pic")))
  73.             self.driver.find_element(By.NAME, u"pic").send_keys(self.avatar_image)
  74.         except NoSuchElementException as NSE:
  75.             print "Element not found! {0}".format(NSE.msg)
  76.         except TimeoutException as TE:
  77.             print "Request Timeout. {0}".format(TE.message)
  78.         except ElementNotVisibleException as ENV:
  79.             print "Button not visible! {0}".format(ENV.msg)
  80.         except IOError as IOE:
  81.             print IOE.message
  82.             print IOE.filename
  83.         except:
  84.             self._stack_trace(sys.exc_info())
  85.  
  86.     def _update_hometown(self):
  87.         try:
  88.             curr_city = self.driver.find_element(By.ID, u"current_city")
  89.             curr_city.find_element(By.CLASS_NAME, u"fbProfileBlankStateIcon").click()
  90.             WebDriverWait(self.driver, 15).until(ec.presence_of_element_located((By.ID, u"edit_hometown")))
  91.             input_field = self.driver.find_element(By.ID, u"edit_hometown").find_element(By.CLASS_NAME, u"inputtext")
  92.             input_field.send_keys(u"Минск")
  93.             input_field.click()
  94.             WebDriverWait(self.driver, 15).until(ec.presence_of_element_located((By.CLASS_NAME, u"text")))
  95.             self.driver.find_element(By.CLASS_NAME, u"text").click()
  96.             self.driver.find_element(By.NAME, "save").click()
  97.  
  98.         except ElementNotVisibleException as NVE:
  99.             print "Button not visible! {0}".format(NVE.msg)
  100.             self._stack_trace(sys.exc_info())
  101.         except TimeoutException as TE:
  102.             print "Timeout failure. {0}".format(TE.msg)
  103.  
  104.         except NoSuchElementException as nse:
  105.             print 'Error. Element not found! {0}'.format(nse.msg)
  106.             import traceback
  107.             type_, value_, trace_ = sys.exc_info()
  108.             print traceback.format_tb(trace_)
  109.         except:
  110.             print "Something went wrong."
  111.             import traceback
  112.             type_, value_, trace_ = sys.exc_info()
  113.             print type_, "\t", value_
  114.             print traceback.format_tb(trace_)
  115.  
  116.     def update(self):
  117.         if not self.cookie:
  118.             raise NotLoggedInError("No cookies found! Possible Log in failure")
  119.         self.driver.get(self.update_url)
  120.         # self._update_avatar()
  121.         self._update_hometown()
  122.  
  123. account = Facebook("login", "pass")
  124. account.log_in()
  125. account.update()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement