Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- This script allows you to use bitvisitor.com without having to open it in a webbrowser.
- However, you will still have to wait the 5 minutes and enter the captchas manually.
- It is mainly a console application, but a small window will ask you for the captchas.
- 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] (all arguments are optional)
- optional arguments:
- -h, --help Show this help message and exit.
- -u path, --user-agents path A path to a file containing a user-agent on each line.
- -a address, --address address Your bitcoin address. If omitted, you will be prompted.
- Created on 02.01.2013
- Last update on 30.07.2013
- @author: The_Exile (http://www.reddit.com/user/the_exiled_one/)
- 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, container, 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:g}'.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 _:(container.setdefault(0, (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 PyVisitor:
- def __init__(self, address=None, agentFile=None):
- self.__addr = address
- if not address:
- address = {}
- InputWindow(address)
- if not address.get(0):
- print 'Aborted by user.'
- exit(0)
- self.__addr = address[0]
- self.__currentProfit = .0
- self.__currency = ''
- self.__captchaURL = None
- self.__host = 'http://bitvisitor.com/'
- defaultAgent = 'Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.15'
- 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 agent in f])
- except:
- print 'Using default User-Agent.'
- print 'User-Agent:', self.__headers['User-Agent']
- print 'Bitcoin address:', self.__addr
- 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])
- 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:g} {1} in'.format(self.__currentProfit, self.__currency),
- 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 nothing, but it helps me.
- params = urlencode({'addr':self.__addr, 'ref':'1Mj8JCYJDjDKMjmvsTrpVPap4BvFyGZVCm'})
- 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 = {}
- InputWindow(captcha, Image.open(StringIO(urlopen(self.__captchaURL).read())), self.__currentProfit)
- if not captcha.get(0):
- print 'Aborted by user.'
- break
- cParams = urlencode({'ct_captcha':captcha[0], 'addr':self.__addr})
- soup = BeautifulSoup(urlopen(Request(url, cParams, self.__headers)).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']
- t = form.find('input', {'name':'t'})['value']
- if a and t:
- break
- if not a: # aborted by user or site error
- break
- self.__wait(soup)
- nParams = urlencode({'addr':self.__addr, 'a':a, 't':t})
- res = urlopen(Request(url, nParams, self.__headers))
- if not res:
- break
- print 'Earned {0:g} {1}'.format(self.__currentProfit, self.__currency)
- def main():
- parser = ArgumentParser()
- parser.add_argument('-u', '--user-agents', metavar='path',
- help='A path to a file containing a user-agent on each line.')
- parser.add_argument('-a', '--address', metavar='address',
- help='Your bitcoin address. If omitted, you will be prompted.')
- ns = parser.parse_args()
- try:
- PyVisitor(ns.address, ns.user_agents).visit()
- except URLError as e:
- print str(e)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement