#!/usr/bin/env ruby
# encoding: UTF-8
require 'net/http'
require 'uri'
require 'open-uri'
require 'fileutils'
require 'nokogiri'
require 'selenium/webdriver'
require 'watir-webdriver'
module HoneyCoin
class HoneyCoinHarvester
START_URL = 'http://www.honeybitcoin.com/'
GOTO_URL = 'http://www.honeybitcoin.com/index.php?lang=en'
=begin rdoc
Public method returning random number between limits
=end
def aleat
r = Random.new
return r.rand(300..315)
end
=begin rdoc
Public method checking if instance is on the true page
=end
def check_page
@b.goto START_URL
if
@b.title == "Honey Bitcoin"
then
return true
else
return false
end
end
=begin rdoc
In order to create a valid uploader instance pass credentials of some registered account.
=end
def initialize(data)
@proxy = data
make_agent(@proxy)
end
def finalize
kill_agent
end
=begin rdoc
Logs into the site using address passed to constructor.
Returns true value on success and false value if login failed.
=end
def login(addr)
@addr = addr
attempt = 0
begin
@b.goto START_URL
sleep(10)
@b.text_field(:id, "visitorADDRESS").when_present.set(@addr)
@b.execute_script("ajax_newVisitor();")
rescue
attempt += 1
retry unless attempt > 2
raise "proxy unable to connect"
end
end
=begin rdoc
wait until next_button is present. click when present
=end
def wait_next
@b.execute_script("check_VALID_URL_VISIT();")
sleep(10)
end
=begin rdoc
unless legal limit, process.
=end
def check_visit?
if
@b.text.include?("Has llegado a tu cupo por hoy, vuelve dentro de 24H por")
then
raise "24h limit over"
elsif
@b.text.include?("De momento no hay ninguna URL para visitar, pasate")
then
raise "no more urls to visit"
elsif
@b.text.include?("Internal Server Error")
then
raise "internal server error"
elsif
@b.text.include?("The server encountered an internal error or misconfiguration and was unable to complete your request.")
then
raise "internal server error"
else
return true
end
end
def mark(quand)
doc = Nokogiri::HTML(@b.html)
balance = doc.search('//*[@id="VCP_visitorTOTAL_REWARD"]').text
current_addr = doc.search('//*[@id="VCP_visitorADDRESS"]').text
puts quand << " - " << @proxy << " - " << current_addr << " - " << balance
end
def process
sleep(20)
mark("begin")
while check_visit?
Watir::Wait.until(aleat) {
text = @b.text
text.include? "Siguiente URL" or text.include? "Next URL"
}
wait_next
end
mark("end")
end
=begin rdoc
In order to create a valid harvester instance pass btc address.
=end
private
def make_agent(proxy_tested)
proxy_addr, proxy_port = proxy_tested.split(':')
profile = Selenium::WebDriver::Firefox::Profile.new
profile["network.proxy.type"] = 1
profile["network.proxy.http"] = proxy_addr
profile["network.proxy.http_port"] = proxy_port.to_i
@b = Watir::Browser.new :firefox, :profile => profile
end
def kill_agent
@b.close
end
end
end