Skip to content

Instantly share code, notes, and snippets.

@evgeniyp
Last active December 15, 2015 18:01
Show Gist options
  • Save evgeniyp/bdd5d4a8966f3f82967c to your computer and use it in GitHub Desktop.
Save evgeniyp/bdd5d4a8966f3f82967c to your computer and use it in GitHub Desktop.
import http.client
import time
import json
import ctypes
import os
from tkinter import *
import urllib.parse
import hashlib
import re
import socket
import atexit
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from splinter import Browser
from selenium import webdriver
import webbrowser
#from stats import MyApp
import socks
app_version=0.03
api_host="api.trafficstore.com"
pid=""
br=""
service_key = ""
stats=""
def check_version():
data=http_request("GET",api_host,"/version/auto")
parsed_data=json.loads(data.decode("utf-8"))
version = parsed_data['version']
if float(version) > app_version:
create_alert()
return 0
return 1
def save_data_on_exit():
if service_key != "":
http_request('POST',api_host,"/task/types/77/close")
return 0
def http_request(method,host,url):
while 1:
try:
c = http.client.HTTPSConnection(host)
c.timeout=60
c.request(method, url, headers={"X-SERVICE-KEY": service_key,'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'})
response = c.getresponse()
print(response.status)
if response.status == 200 or response.status == 201:
break
time.sleep(2)
print(response.getheaders())
print(response.read())
except(http.client.HTTPException, socket.error) as ex:
print("cannot connect to api server")
finally:
time.sleep(2)
data = response.read()
c.close()
return data
def click_by_xy(x,y):
ctypes.windll.user32.SetCursorPos(x, y)
ctypes.windll.user32.mouse_event(2, 0, 0, 0,0) # left down
ctypes.windll.user32.mouse_event(4, 0, 0, 0,0) # left up
def get_resolution():
user32 = ctypes.windll.user32
user32.SetProcessDPIAware()
w=user32.GetSystemMetrics(0)
h=user32.GetSystemMetrics(1)
return h,w
def write_error_code_alert(message):
result = ctypes.windll.user32.MessageBoxW(0, message, message, 1)
return 0
def create_alert():
result = ctypes.windll.user32.MessageBoxW(0, u"Доступна новая версия программы", u"Доступна новая версия программы", 1)
if result == 1:
start_browser("http://trafficstore.com/autoprogram")
elif result == 2:
exit(0)
def ok_login(login,password):
global service_key
print("in ok login, login "+login)
#headers={"email":login,"password":password}
params = urllib.parse.urlencode({'email': login, 'password': password})
if login != "":
while 1:
try:
c = http.client.HTTPSConnection("www.trafficstore.com")
c.timeout=20
c.request("POST", "/sapi/user/auth",urllib.parse.urlencode({'email': login, 'password': password}),headers = {"Content-type": "application/x-www-form-urlencoded",'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'})
response = c.getresponse()
print(response.status)
if response.status == 200 or response.status == 201:
break
elif response.status == 401:
write_error_code_alert('Error, code 401')
os._exit(0)
except(http.client.HTTPException, socket.error) as ex:
print("cannot connect to api server")
finally:
time.sleep(2)
data = response.getheader("X-SERVICE-KEY")
c.close()
print(data)
service_key = data
return 0
def get_credentials():
master = Tk()
master.wm_title(u"Авторизация")
master.update_idletasks()
width = master.winfo_width()
height = master.winfo_height()
x = (master.winfo_screenwidth() // 2) - (width // 2)
y = (master.winfo_screenheight() // 2) - (height // 2)
master.geometry('{}x{}+{}+{}'.format(200, 70, x, y))
label = Label(master,text=u'Email: ')
e = Entry(master)
e2 = Entry(master)
label1 = Label(master,text=u'Пароль: ')
label.grid(row=0,column=1)
e = Entry(master)
e.grid(row=0,column=2)
label1.grid(row=1,column=1)
e2.grid(row=1,column=2)
e.focus()
new_order = (e, e2, )
def on_closing():
master.destroy()
os._exit(0)
master.protocol("WM_DELETE_WINDOW", on_closing)
def callback():
print(e.get())
print(e2.get())
ok_login(e.get(),e2.get())
master.destroy()
b = Button(master, text=u"Вход", width=10, command=callback)
b.grid(row=2,column=2)
new_order = (e, e2, b)
for widget in new_order:
widget.lift()
master.mainloop()
return 0
def programm_version():
return programm_version
def get_promo_time_on_site(task_json):
parsed_data=json.loads(task_json)
return parsed_data['timeOnSite']
def get_promo_id(task_json):
parsed_data=json.loads(task_json)
return parsed_data['id']
def get_promo_goalid(task_json):
parsed_data=json.loads(task_json)
return parsed_data['goalId']
def get_promo_type(task_json):
parsed_data=json.loads(task_json)
return parsed_data['type']
def get_is_use_mouse(task_json):
parsed_data=json.loads(task_json)
if 'useMouse' in parsed_data.keys():
return parsed_data['useMouse']
else:
return 0
def get_limitExecutor(task_json):
parsed_data=json.loads(task_json)
if 'limitExecutor' in parsed_data.keys():
return parsed_data['limitExecutor']
else:
return 0
def get_promo_url(task_json):
parsed_data=json.loads(task_json)
return parsed_data['url']
def get_autotask_timeout(task_json):
parsed_data=json.loads(task_json)
return parsed_data['timeout']
def get_autotask_quantity(task_json):
parsed_data=json.loads(task_json)
return parsed_data['quantity']
def get_autotask_quantity_available(task_json):
parsed_data=json.loads(task_json)
return parsed_data['quantityAvailable']
def get_autotask_url(task_json):
parsed_data=json.loads(task_json)
return parsed_data['urls']
def stop_browser():
p.terminate()
def start_browser(url):
#import winreg as winreg
#global pid
#aReg = winreg.ConnectRegistry(None,winreg.HKEY_CLASSES_ROOT)
#aKey = winreg.OpenKey(aReg,r"http\shell\open\command")
#val=winreg.QueryValueEx(aKey, "")
#m = re.search('"(.+?)"', val[0])
#if m:
# found = m.group(1)
#print(found)
#print(url)
#pid = subprocess.Popen([found, url])
#def_browser=get_browser_exec_name()
#def_browser=def_browser.lower()
#def_browser_path=get_default_browser_path()
global br
#print(def_browser)
#if def_browser.find('firefox') != -1:
# br = Browser('firefox')
# #firebox_binary = FirefoxBinary(def_browser_path)
# #br = webdriver.Firefox(firefox_binary=firebox_binary)
#elif def_browser.find('chrome') != -1:
# br = Browser('chrome')
#else:
try:
br = Browser()
br.visit(url)
print("trying max window")
br.driver.maximize_window()
except:
webbrowser.open(url)
#except:
# def_browser=get_browser_exec_name()
# def_browser=def_browser.lower()
# def_browser_path=get_default_browser_path()
# print(def_browser)
# if def_browser.find('firefox') != -1:
# br = Browser('firefox')
# firebox_binary = FirefoxBinary(def_browser_path)
# br = webdriver.Firefox(firefox_binary=firebox_binary)
# elif def_browser.find('chrome') != -1:
# br = Browser('chrome')
finally:
time.sleep(5)
def job_done():
while 1:
c = http.client.HTTPConnection("system-api.trafficstore.ru")
c.request("GET", "/platform/linux/jobs", headers={"X-SERVICE-KEY": "kamnh1002834lva"})
response = c.getresponse()
if response.status == 200:
break
time.sleep(2)
c.close()
return data
def get_current_user_home_dir():
homedir = os.path.expanduser('~')
try:
from win32com.shell import shellcon, shell
homedir = shell.SHGetFolderPath(0, shellcon.CSIDL_APPDATA, 0, 0)
except ImportError:
homedir = os.path.expanduser("~")
return homedir
def get_job(host, url):
if url == "":
url="/platform/linux/jobs"
if host == "":
host="api.trafficstore.com"
print(service_key)
http_request("POST", api_host,"/task/types/77/close")
data=http_request("GET",host,"/task/random")
print(data.decode("utf-8"))
task_id=get_promo_id(data.decode("utf-8"))
print(task_id)
data2=http_request("GET",host,"/task/"+task_id)
print(data2.decode("utf-8"))
#c = http.client.HTTPConnection("system-api.trafficstore.ru")
#c.request("PUT", "/platform/linux/jobs", headers={"X-SERVICE-KEY": "kamnh1002834lva","Content-Length":"0"})
#response = c.getresponse()
return data2
def get_exit_ip():
c = http.client.HTTPConnection("mototrend.org")
c.request("GET", "/tst.php?ip")
response = c.getresponse()
print(response.status, response.reason)
data = response.read()
c.close()
return data
def get_external_country():
return ""
def check_cookies():
browser_path=get_default_browser_path()
print(browser_path)
#is_google_cookie_exist=""
if len(browser_path) != 0:
def_browser=get_browser_exec_name()
def_browser=def_browser.lower()
total_size = 0
if def_browser.find('firefox') != -1:
#check main folder size
for dirpath, dirnames, filenames in os.walk(browser_path):
for f in filenames:
fp = os.path.join(dirpath, f)
total_size += os.path.getsize(fp)
#conn = sqlite3.connect(browser_path+'/cookie.sqlite')
#conn.execute("select * from moz_cookies where name='yandexuid'")
#cookie_data=conn.fetchone()[0]
#print(cookie_data)
#conn.close()
elif def_browser.find('chrome') != -1:
#check main folder size
for dirpath, dirnames, filenames in os.walk(browser_path):
for f in filenames:
fp = os.path.join(dirpath, f)
total_size += os.path.getsize(fp)
else:
write_error_code_alert('Error, code 103')
total_size=total_size/1024/1024
if total_size < 30:
write_error_code_alert('Error, code 100')
return -100
#elif len(cookie_data) == "":
# write_error_code_alert('Error, code 104')
# return -104
else:
return 0
def get_browser_exec_name():
import winreg as winreg
def_browser=getDefaultBrowser()
if def_browser == "IE.HTTP":
aReg = winreg.ConnectRegistry(None,winreg.HKEY_LOCAL_MACHINE)
aKey = winreg.OpenKey(aReg,r"SOFTWARE\Classes\IE.HTTP\shell\open\command")
else:
aReg = winreg.ConnectRegistry(None,winreg.HKEY_CLASSES_ROOT)
aKey = winreg.OpenKey(aReg,r"http\shell\open\command")
val=winreg.QueryValueEx(aKey, "")
m = re.search('"(.+?)"', val[0])
if m:
found = m.group(1)
browser_exec_name=os.path.basename(found)
#print("get_browser_exec_name = "+browser_exec_name)
return browser_exec_name
else:
write_error_code_alert('Error, code 102')
return ""
def get_default_browser_path():
import winreg as winreg
def_browser=getDefaultBrowser()
if def_browser == "IE.HTTP":
aReg = winreg.ConnectRegistry(None,winreg.HKEY_LOCAL_MACHINE)
aKey = winreg.OpenKey(aReg,r"SOFTWARE\Classes\IE.HTTP\shell\open\command")
else:
aReg = winreg.ConnectRegistry(None,winreg.HKEY_CLASSES_ROOT)
aKey = winreg.OpenKey(aReg,r"http\shell\open\command")
#aReg = winreg.ConnectRegistry(None,winreg.HKEY_CURRENT_USER)
#aKey = winreg.OpenKey(aReg, r"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice")
val=winreg.QueryValueEx(aKey, "")
m = re.search('"(.+?)"', val[0])
if m:
found = m.group(1)
print("default browser "+found)
browser_path=os.path.dirname(found)
return browser_path
else:
write_error_code_alert('Error, code 101')
return ""
def get_first(iterable, default=None):
if iterable:
for item in iterable:
return item
return default
def start_autotask(job_data):
global br
print("start autotask "+job_data.decode("utf-8"))
task_id=get_promo_id(job_data.decode("utf-8"))
print (task_id)
http_request('POST',api_host,"/task/types/77/close")
data=http_request("POST", api_host,"/task/"+task_id+"/work")
goal_id=get_promo_goalid(data.decode("utf-8"))
print("promo goalId = "+goal_id)
data=http_request("GET", api_host,"/task/"+task_id)
print(data.decode("utf-8"))
quantity=int(get_limitExecutor(data.decode("utf-8")))
timeout=int(get_autotask_timeout(data.decode("utf-8")))
urls=get_autotask_url(data.decode("utf-8"))
url=get_first(urls)
print(quantity,timeout)
is_use_mouse=int(get_is_use_mouse(data.decode("utf-8")))
quantity_done=0
while quantity > 0:
print(quantity)
timeout_tmp=timeout
start_browser(url)
print("started browser")
time.sleep(10)
if is_use_mouse:
click_by_xy(600,350)
while timeout_tmp > 0:
if is_browser_not_running():
print("closed browser")
save_data_on_exit()
os._exit(0)
timeout_tmp=timeout_tmp-1
time.sleep(1)
while 1:
if not is_browser_not_running():
print("killing browser")
if br:
br.quit()
else:
os.system("taskkill /im "+get_browser_exec_name()+" /F")
else:
break
time.sleep(1)
print("killed browser")
quantity_done=quantity_done+1
hash_string="{0}z2Ipah07XmiiAn5AIwGYnaB20AwV4q0D{1}".format(str(goal_id), str(quantity_done))
print(hash_string)
hash_string=hashlib.sha256(hash_string.encode("utf-8")).hexdigest()
print(quantity_done)
print(hash_string)
while 1:
c = http.client.HTTPSConnection(api_host)
c.request("PUT", "/task/goal/{0}/sync".format(str(goal_id)),json.dumps({'hash': hash_string}),headers = {"Content-type": "application/json","X-SERVICE-KEY": service_key,'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'})
response = c.getresponse()
print(response.status)
if response.status == 200 or response.status == 201:
break
time.sleep(2)
print(response.getheaders())
print(response.read())
c.close()
print("synced")
quantity=quantity-1
#while 1:
# c = http.client.HTTPConnection("api.test.trafficstore.ru")
# c.request("PUT", "/task/goal/"+goal_id+"/sync",urllib.parse.urlencode({'hash': hashlib.sha256(goal_id+"z2Ipah07XmiiAn5AIwGYnaB20AwV4q0D"+quantity_done),'state':'SOLVED'}),headers = {"Content-type": "application/json"})
# response = c.getresponse()
# print(response.status)
# if response.status == 200 or response.status == 201:
# break
# time.sleep(2)
return 0
def is_browser_not_running():
r = os.popen('tasklist /FI "STATUS eq Running"').read().strip().split('\n')
found = False
def_browser=get_browser_exec_name()
#def_browser_path=get_default_browser_path()
print(def_browser)
#print(def_browser_path)
for p in r:
if p.startswith(def_browser):
found = True
if not found:
return 1
else:
return 0
def view_youtube(data):
url=get_promo_url(job_data.decode("utf-8"))
quantity=int(get_autotask_quantity(data.decode("utf-8")))
timeout=int(get_autotask_timeout(data.decode("utf-8")))
while quantity > 0:
timeout_tmp=timeout
print(quantity)
start_browser(url,timeout)
time.sleep(5)
# click_by_xy(500,500)
while timeout_tmp > 0:
if is_browser_not_running():
print("closed browser")
exit(0)
timeout_tmp=timeout_tmp-1
time.sleep(1)
os.system("taskkill /im firefox.exe")
quantity=quantity-1
return 0
def view_rutube(data):
url=get_promo_url(job_data.decode("utf-8"))
quantity=int(get_autotask_quantity(data.decode("utf-8")))
timeout=int(get_autotask_timeout(data.decode("utf-8")))
while quantity > 0:
timeout_tmp=timeout
print(quantity)
start_browser(url,timeout)
time.sleep(5)
# click_by_xy(500,500)
while timeout_tmp > 0:
if is_browser_not_running():
print("closed browser")
exit(0)
timeout_tmp=timeout_tmp-1
time.sleep(1)
os.system("taskkill /im firefox.exe")
quantity=quantity-1
return 0
def view_vimeo(data):
url=get_promo_url(job_data.decode("utf-8"))
quantity=int(get_autotask_quantity(data.decode("utf-8")))
timeout=int(get_autotask_timeout(data.decode("utf-8")))
while quantity > 0:
timeout_tmp=timeout
print(quantity)
start_browser(url,timeout)
time.sleep(5)
# click_by_xy(500,500)
while timeout_tmp > 0:
if is_browser_not_running():
print("closed browser")
exit(0)
timeout_tmp=timeout_tmp-1
time.sleep(1)
os.system("taskkill /im firefox.exe")
time.sleep(5)
quantity=quantity-1
return 0
def start_promo_type(job_data):
promo_type=int(get_promo_type(job_data.decode("utf-8")))
if promo_type == 30:
print(30)
elif promo_type == 31:
print(30)
elif promo_type == 32:
print(30)
elif promo_type == 33:
print(30)
elif promo_type == 34:
print(30)
elif promo_type == 35:
print(30)
elif promo_type == 36:
view_youtube(job_data)
elif promo_type == 37:
print(30)
elif promo_type == 40:
view_rutube(job_data)
elif promo_type == 41:
view_vimeo(job_data)
elif promo_type == 69:
print(69)
elif promo_type == 77:
start_autotask(job_data)
return 0
def getDefaultBrowser():
import winreg as winreg
aReg = winreg.ConnectRegistry(None,winreg.HKEY_CURRENT_USER)
aKey = winreg.OpenKey(aReg, r"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice")
if aKey:
val=winreg.QueryValueEx(aKey, "Progid")
return val[0]
else:
return "IE.HTTP"
def show_me_alive():
str = 'alive'
sock = socket.socket()
sock.connect(('mototrend.org', 9090))
while 1:
sock.send(bytes(str,'utf-8'))
#data = sock.recv(1024)
time.sleep(5)
return 0
def socks_server():
return 0
def get_firefox_profile_dir():
def_browser=getDefaultBrowser()
home_user_dir=get_current_user_home_dir()
if def_browser == "FirefoxURL":
part_of_path="Mozilla\Firefox\Profiles\g3lj9cpd.default"
#trying to get_profile
return 0
def main():
#try:
#first checks
#trying get get_browser_exec_name
# if check_version():
#if get_browser_exec_name() != "":
# get_credentials()
# if check_cookies() == 0:
# atexit.register(save_data_on_exit)
# if service_key != "":
# job_data=get_job("","")
# start_promo_type(job_data)
# else:
# write_error_code_alert('Error, code 200')
# os._exit(0)
# else:
# os._exit(0)
#finally:
# save_data_on_exit()
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment