Sunteți pe pagina 1din 4

'''

This script allows you to use bitvisitor.com without having to open it in a webb
rowser.
However, you will still have to wait the 5 minutes and enter the captchas manual
ly.
It is mainly a console application, but a small window will ask you for the capt
chas.
This script was tested with Python 2.7 on Windows 7. Besides the standard stuff,
it depends on BeautifulSoup (http://www.crummy.com/software/BeautifulSoup/)
and PIL (http://www.pythonware.com/products/pil/).
usage: pyvisitor.py [-h] [-u path] [-a address]
optional arguments:
-h, --help
-u path, --user-agents path
ch line.
-a address, --address address
prompted.

Show this help message and exit.


A path to a file containing a user-agent on ea
Your bitcoin address. If omitted, you will be

Created on 02.01.2013
Last update on 29.03.2013
@author: The_Exile
Feel free to drop me a coin or two at 13QgXZGtXYEY9cnEB9mGuD1ZbXMWirTicg
'''
from PIL import Image, ImageTk
from Tkinter import Tk, Entry, Label
from argparse import ArgumentParser
from bs4 import BeautifulSoup
from cStringIO import StringIO
from cookielib import CookieJar
from random import randrange, choice
from time import sleep
from urllib import urlencode
from urllib2 import urlopen, Request, HTTPCookieProcessor, install_opener, build
_opener, URLError
class InputWindow:
def __init__(self, captcha, img=None, p=None):
root = Tk()
root.attributes('-topmost', 1)
hint = '(Enter - submit, Esc - abort)'
if img is None:
root.wm_title('Address')
hint = 'Please enter your Bitcoin address.\n' + hint
else:
root.wm_title('Captcha {0:.4f}'.format(p))
img = ImageTk.PhotoImage(img)
root.img_reference = img
image = Label(root, image=img, text=hint, compound='top')
image.pack()
entry = Entry(root)
entry.bind('<Escape>', lambda _:root.destroy())
entry.bind('<Return>', lambda _:(captcha.set(entry.get()), root.destroy(
)))
entry.pack()
entry.focus_set()

root.update_idletasks()
xp = (root.winfo_screenwidth() / 2) - (root.winfo_width() / 2) - 8
yp = (root.winfo_screenheight() / 2) - (root.winfo_height() / 2) - 20
root.geometry('+%d+%d' % (xp, yp))
root.mainloop()
class Captcha:
def __init__(self): self.value = None
def set(self, value): self.value = value
class PyVisitor:
def __init__(self, address=None, agentFile=None):
self.__addr = address
if not address:
address = Captcha()
InputWindow(address)
if not address.value:
print 'Aborted by user.'
exit(0)
self.__addr = address.value
self.__profit = self.__currentProfit = .0
self.__currency = ''
self.__captchaURL = None
self.__host = 'http://bitvisitor.com/'
defaultAgent = 'Opera/9.80 (Windows NT 5.1; U; en) Presto/2.10.289 Versi
on/12.01'
self.__headers = {'Accept':'text/html,application/xhtml+xml,application/
xml',
'User-Agent':defaultAgent}
install_opener(build_opener(HTTPCookieProcessor(CookieJar())))
if agentFile:
try:
with open(agentFile) as f:
self.__headers['User-Agent'] = choice([agent.rstrip() for ag
ent in f])
except:
print 'Using default User-Agent.'
print 'User-Agent:', self.__headers['User-Agent']
def __getCaptchaURL(self, soup):
captchaImg = soup.find('img', id='siimage')
if not captchaImg:
return
earning = soup.find('h1', 'page-header').contents[1].split()
self.__currentProfit = float(earning[0])
if not self.__currency: self.__currency = earning[1]
self.__captchaURL = self.__host + captchaImg['src'].lstrip('./')
return self.__captchaURL
def __wait(self, soup):
siteFrame = soup.find('iframe', id='mlsFrame')
if not siteFrame: return
print 'Visiting', siteFrame['src']
print 'Getting {0:.4f} {1} in'.format(self.__currentProfit,self.__curren
cy),
for i in range(5, 0, -1):
print i,
sleep(60)
print
sleep(randrange(1, 10)) # just to be sure ;)

def visit(self):
req = Request(self.__host, None, self.__headers)
res = urlopen(req) # set session cookie
if 'abuse' in res.geturl():
print 'ERROR: The IP address was deemed suspicious.'
return
# Please do not change the address in the next line. It costs you nothin
g, but it helps me.
params = urlencode({'addr':self.__addr, 'ref':'1Mj8JCYJDjDKMjmvsTrpVPap4
BvFyGZVCm'})
url = self.__host + 'next.php'
self.__headers['Referer'] = url
req = Request(url, params, self.__headers)
while True:
res = urlopen(req)
if 'abuse' in res.geturl():
print 'ERROR: The IP address was deemed suspicious.'
break
soup = BeautifulSoup(res.read())
if not self.__getCaptchaURL(soup): break
a = None
while not a:
captcha = Captcha()
InputWindow(captcha, Image.open(StringIO(urlopen(self.__captchaU
RL).read())), self.__currentProfit)
if not captcha.value:
print 'Aborted by user.'
break
cParams = urlencode({'ct_captcha':captcha.value, 'addr':self.__a
ddr})
soup = BeautifulSoup(urlopen(Request(url, cParams, self.__header
s)).read())
form = soup.find('form', action='next.php')
if not form:
message = soup.get_text()
if 'Incorrect' in message: continue
print message
break
a = form.find('input', {'name':'a'})['value']
if a: break
if not a: # aborted by user or site error
break
self.__wait(soup)
nParams = urlencode({'addr':self.__addr, 'a':a})
res = urlopen(Request(url, nParams, self.__headers))
if not res:
break
self.__profit += self.__currentProfit
print 'Earned {0:.4f} {1} ({2:.4f} {1})'.format(self.__currentProfit
, self.__currency, self.__profit)
print 'Exiting with {0} {1} earned.'.format(self.__profit, self.__curren
cy)
def main():
parser = ArgumentParser()
parser.add_argument('-u', '--user-agents', metavar='path',
help='A path to a file containing a user-agent on each l
ine.')
parser.add_argument('-a', '--address', metavar='address',

help='Your bitcoin address. If omitted, you will be prom


pted.')
ns = parser.parse_args()
try:
PyVisitor(ns.address, ns.user_agents).visit()
except URLError as e:
print str(e)
if __name__ == "__main__":
main()

S-ar putea să vă placă și