import components import logging import rain # inititialize parameters print("INFO: reading configuration file...") try: f = open(rain.toRelPath("config.ini"), "r") except FileNotFoundError: input("ERROR: configuration file not found") exit() params = {} for line in f: if len(line.strip()) == 0: continue linesplit = line.strip().split(sep=None, maxsplit=1) params[linesplit[0]] = linesplit[1] f.close() try: f = open(rain.toRelPath(params["credentials"]), "r") except FileNotFoundError: input("ERROR: " + params["credentials"] + " configuration file not found") exit() for line in f: if len(line.strip()) == 0: continue linesplit = line.strip().split(sep=None, maxsplit=1) params[linesplit[0]] = linesplit[1]
# don't use this script i guess import rain import configparser from PIL import Image import numpy import json import os config = configparser.ConfigParser() config.read(rain.toRelPath('../cfg/cfg.ini')) stateStr = config['default']['states'] states = ['AK', 'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DE', 'FL', 'GA', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VT', 'WA', 'WI', 'WV', 'WY'] stateDict = {'AK': 0, 'AL': 1, 'AR': 2, 'AZ': 3, 'CA': 4, 'CO': 5, 'CT': 6, 'DE': 7, 'FL': 8, 'GA': 9, 'HI': 10, 'IA': 11, 'ID': 12, 'IL': 13, 'IN': 14, 'KS': 15, 'KY': 16, 'LA': 17, 'MA': 18, 'MD': 19, 'ME': 20, 'MI': 21, 'MN': 22, 'MO': 23, 'MS': 24, 'MT': 25, 'NC': 26, 'ND': 27, 'NE': 28, 'NH': 29, 'NJ': 30, 'NM': 31, 'NV': 32, 'NY': 33, 'OH': 34, 'OK': 35, 'OR': 36, 'PA': 37, 'RI': 38, 'SC': 39, 'SD': 40, 'TN': 41, 'TX': 42, 'UT': 43, 'VA': 44, 'VT': 45, 'WA': 46, 'WI': 47, 'WV': 48, 'WY': 49} regions = [] for a in range(len(states)): with open(config['default']['regions-pt-dir'] + states[a] + '.json') as f: regions.append(json.load(f)) granularity = float(config['default']['pt-granularity']) gestureFiles = os.listdir(config['default']['gestures']) print(gestureFiles) for a in range(len(gestureFiles)): with open(config['default']['gestures'] + gestureFiles[a]) as f: gestures = json.load(f) for b in range(len(gestures)):
def manageInsta(params, logger): # inititialize parameters pageloadwait = float(params["insta-pageloadwait"]) scrollwait = float(params["insta-scrollwait"]) heartcooldown = float(params["insta-heartcooldown"]) # login logger.info("INFO: logging in") chrome_options = Options() chrome_options.add_argument( "--disable-notifications --mute-audio --log-level=3 --silent --disable-gpu --allow-insecure-localhost" ) if params["hideBrowser"] == "yes": chrome_options.add_argument("--headless") driver = webdriver.Chrome(rain.toRelPath(params["chromedrloc"]), chrome_options=chrome_options) driver.implicitly_wait(0) #blocks for pages to load driver.get("https://www.instagram.com/") driver.find_element_by_link_text("Log in").click() time.sleep(pageloadwait) driver.find_element_by_name("username").send_keys(params["insta-username"]) driver.find_element_by_name("password").send_keys(params["insta-password"]) driver.find_element_by_xpath( "//button[contains(.//div, \"Log in\")]").click() logger.info("SUCCESS: login success") # scoll pages and heart posts until many current pages contain no more hearts logger.info("INFO: hearting posts") curheight = 0 totalhearts = 0 nohearts = 0 windowHeight = driver.execute_script( "return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight" ) while nohearts <= int(params["insta-noheartlimit"]): driver.execute_script("window.scrollTo(0, arguments[0]);", curheight) curheight += windowHeight time.sleep(scrollwait) hearts = driver.find_elements_by_class_name("coreSpriteHeartOpen") clicked = False for a in range(len(hearts)): if hearts[a].is_displayed(): #only if the child element has aria-label "Like" unlikeChilds = hearts[a].find_elements_by_css_selector( "span[aria-label=\"Unlike\"]") print(unlikeChilds) if len(unlikeChilds) > 0: continue # scroll element into the middle of page driver.execute_script( "window.scrollBy(0, arguments[0]);", driver.execute_script( "return arguments[0].getBoundingClientRect().top;", hearts[a]) - windowHeight / 2) hearts[a].click() totalhearts += 1 logger.info("SUCCESS: " + str(totalhearts) + " hearts") clicked = True time.sleep(heartcooldown) if clicked: nohearts = 0 else: nohearts += 1 logger.info("INFO: no more hearts found") # clean up driver.get("https://www.instagram.com/") # to give window time to close driver.close()
def manageFacebook(params, logger): # inititialize parameters pageloadwait = float(params["fb-pageloadwait"]) scrollwait = float(params["fb-scrollwait"]) reactcooldown = float(params["fb-reactcooldown"]) frlinks = [] if params["fb-friendprofiles"] != "All": f = open(rain.toRelPath(params["fb-friendprofiles"]), "r") for a in f: frlinks.append("https://www.facebook.com/" + a.strip()) f.close() # start driver and login to fb logger.info("INFO: logging in") chrome_options = Options() chrome_options.add_argument( "--disable-notifications --mute-audio --log-level=3 --silent --disable-gpu --allow-insecure-localhost" ) if params["hideBrowser"] == "yes": chrome_options.add_argument("--headless") driver = webdriver.Chrome(rain.toRelPath(params["chromedrloc"]), chrome_options=chrome_options) driver.implicitly_wait(0) #blocks for pages to load driver.get("https://www.facebook.com/login.php") driver.find_element_by_id("email").send_keys(params["fb-username"]) driver.find_element_by_id("pass").send_keys(params["fb-password"]) driver.find_element_by_id("loginbutton").click() logger.info("SUCCESS: login success") # react posts from the feed logger.info("INFO: reacting feed for a max of " + params["fb-feedreactlimit"] + " reacts") reacts = 0 curheight = 0 windowHeight = driver.execute_script( "return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;" ) while reacts < int(params["fb-feedreactlimit"]): driver.execute_script("window.scrollTo(0, arguments[0]);", curheight) curheight += windowHeight #TODO: better wait time.sleep(scrollwait) buttons = driver.find_elements_by_css_selector( "a[data-testid=\"fb-ufi-likelink\"]") for a in range(len(buttons)): if buttons[a].is_displayed(): #reset scroll so that the element is always beneath us driver.execute_script("window.scrollTo(0, 0);") reactFacebookPost(driver, buttons[a], params["fb-react"], params["fb-reacthoverwait"]) reacts += 1 logger.info("SUCCESS: " + str(reacts) + " reacts") time.sleep(reactcooldown) logger.info("INFO: finished reacting from the feed") # get links to friend profiles logger.info("INFO: getting friend profile links") if params["fb-friendprofiles"] == "All": driver.get("https://www.facebook.com/me") friendsurl = driver.find_element_by_css_selector( "a[data-tab-key=\"friends\"]").get_attribute("href") time.sleep(pageloadwait) driver.get(friendsurl) time.sleep(pageloadwait) rain.seleniumFullScroll(driver, pausetime=scrollwait) friends = driver.find_elements_by_css_selector( "div[class=\"uiProfileBlockContent\"]") for a in range(len(friends)): frlinks.append( friends[a].find_element_by_tag_name("a").get_attribute("href")) logger.info("INFO: found " + str(len(frlinks)) + " friends from friends list") else: logger.info("INFO: found " + str(len(frlinks)) + " friends from optional file") # react posts from friend walls logger.info("INFO: reacting friend wall posts") totalreacts = 0 for a in range(len(frlinks)): driver.get(frlinks[a]) time.sleep(pageloadwait) name = driver.find_element_by_id( "fb-timeline-cover-name").find_element_by_tag_name( "a").get_attribute("innerHTML") reacts = 0 curheight = 0 windowHeight = driver.execute_script( "return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight" ) while reacts < int(params["fb-friendreactlimit"]): driver.execute_script("window.scrollTo(0, arguments[0]);", curheight) time.sleep(scrollwait) curheight += windowHeight buttons = driver.find_elements_by_css_selector( "a[data-testid=\"fb-ufi-likelink\"]") for a in range(len(buttons)): if buttons[a].is_displayed(): reactFacebookPost(driver, buttons[a], params["fb-react"], params["fb-reacthoverwait"]) reacts += 1 logger.info("SUCCESS: " + name + ": " + str(reacts) + " reacts") time.sleep(reactcooldown) totalreacts += reacts logger.info("SUCCESS: finished: " + str(totalreacts) + " reacts total") # clean up driver.get("https://www.facebook.com/me") # give window time to close driver.close()
import selenium from selenium import webdriver import rain import configparser from PIL import Image from io import BytesIO config = configparser.ConfigParser() config.read(rain.toRelPath('../cfg/cfg.ini')) stateStr = config['default']['states'] states = [ 'AK', 'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DE', 'FL', 'GA', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VT', 'WA', 'WI', 'WV', 'WY' ] stateDict = { 'AK': 0, 'AL': 1, 'AR': 2, 'AZ': 3, 'CA': 4, 'CO': 5, 'CT': 6, 'DE': 7, 'FL': 8, 'GA': 9, 'HI': 10, 'IA': 11,