Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # coding=utf-8
- # author foreigner.web@gmail.com
- import sys
- import os
- import traceback
- from selenium import webdriver
- from selenium.webdriver.common.action_chains import ActionChains
- from selenium.webdriver.common.by import By
- from selenium.webdriver.support.ui import WebDriverWait
- from selenium.webdriver.support import expected_conditions as ec
- from selenium.common.exceptions import TimeoutException, NoSuchElementException, ElementNotVisibleException
- class NotLoggedInError(Exception):
- pass
- class Facebook(object):
- def __init__(self, login, password):
- self.login = login
- self.password = password
- self.nick = None
- self.normalized_nick = None
- self.avatar_image = "/Users/foreigner/Downloads/avatar.jpg"
- self.login_url = u"https://www.facebook.com/login.php"
- self.update_url = u"https://www.facebook.com/{0}?sk=info&edit=eduwork"
- self.cookie = None
- self.driver = webdriver.Firefox()
- def log_in(self):
- self.driver.get(self.login_url)
- self.driver.find_element(By.NAME, u"email").send_keys(self.login)
- self.driver.find_element(By.NAME, u"pass").send_keys(self.password)
- self.driver.find_element(By.NAME, u"login").submit()
- def normalize_nick(text):
- nick = '.'.join(text.split(' '))
- return nick.lower()
- try:
- WebDriverWait(self.driver, 10).until(ec.presence_of_element_located((By.ID, u"navHome")))
- self.cookie = self.driver.get_cookies()
- self.nick = self.driver.find_element(By.CLASS_NAME, u"headerTinymanName").text
- self.normalized_nick = normalize_nick(self.nick)
- self.update_url = self.update_url.format(self.normalized_nick)
- except TimeoutException as e:
- print "Request Timeout. {0}".format(e.message)
- except TypeError as te:
- print 'Error occurred. {0}'.format(te.message)
- import traceback
- type_, value_, trace_ = sys.exc_info()
- print traceback.format_tb(trace_)
- except:
- print "Something went wrong. {0}".format(sys.exc_info()[0])
- def _stack_trace(self, exc_info):
- """
- :param exc_info:
- """
- _type, _value, _trace = exc_info
- print "Caught exception:\n\t{0}\n\t{1}\nStacktrace: {2}".format(_type, _value, traceback.format_tb(_trace))
- def _update_avatar(self):
- if not self.cookie:
- raise NotLoggedInError("No cookies found. Possible Log in failure")
- try:
- if not os.path.exists(self.avatar_image):
- raise IOError("Avatar file not found")
- self.driver.find_element(By.CLASS_NAME, u"sx_53a53c").click()
- WebDriverWait(self.driver, 10).until(ec.presence_of_element_located((By.CLASS_NAME, u"fbTimelineSelectorFileInput")))
- WebDriverWait(self.driver, 10).until(ec.presence_of_element_located((By.NAME, u"pic")))
- self.driver.find_element(By.NAME, u"pic").send_keys(self.avatar_image)
- except NoSuchElementException as NSE:
- print "Element not found! {0}".format(NSE.msg)
- except TimeoutException as TE:
- print "Request Timeout. {0}".format(TE.message)
- except ElementNotVisibleException as ENV:
- print "Button not visible! {0}".format(ENV.msg)
- except IOError as IOE:
- print IOE.message
- print IOE.filename
- except:
- self._stack_trace(sys.exc_info())
- def _update_hometown(self):
- try:
- curr_city = self.driver.find_element(By.ID, u"current_city")
- curr_city.find_element(By.CLASS_NAME, u"fbProfileBlankStateIcon").click()
- WebDriverWait(self.driver, 15).until(ec.presence_of_element_located((By.ID, u"edit_hometown")))
- input_field = self.driver.find_element(By.ID, u"edit_hometown").find_element(By.CLASS_NAME, u"inputtext")
- input_field.send_keys(u"Минск")
- input_field.click()
- WebDriverWait(self.driver, 15).until(ec.presence_of_element_located((By.CLASS_NAME, u"text")))
- self.driver.find_element(By.CLASS_NAME, u"text").click()
- self.driver.find_element(By.NAME, "save").click()
- except ElementNotVisibleException as NVE:
- print "Button not visible! {0}".format(NVE.msg)
- self._stack_trace(sys.exc_info())
- except TimeoutException as TE:
- print "Timeout failure. {0}".format(TE.msg)
- except NoSuchElementException as nse:
- print 'Error. Element not found! {0}'.format(nse.msg)
- import traceback
- type_, value_, trace_ = sys.exc_info()
- print traceback.format_tb(trace_)
- except:
- print "Something went wrong."
- import traceback
- type_, value_, trace_ = sys.exc_info()
- print type_, "\t", value_
- print traceback.format_tb(trace_)
- def update(self):
- if not self.cookie:
- raise NotLoggedInError("No cookies found! Possible Log in failure")
- self.driver.get(self.update_url)
- # self._update_avatar()
- self._update_hometown()
- account = Facebook("login", "pass")
- account.log_in()
- account.update()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement