class OkcBot::Browser

Attributes

base_url[R]
browser[R]
driver[R]

Public Class Methods

new(args) click to toggle source
# File lib/okc_bot/browser.rb, line 6
def initialize(args)
  @username = args[:username]
  @password = args[:password]
  @driver    = args[:driver].to_sym
  @browser = Watir::Browser.new driver
  @base_url = "http://www.okcupid.com"
end

Public Instance Methods

load_entire_page() click to toggle source
# File lib/okc_bot/browser.rb, line 60
def load_entire_page
  load_more_messages
  unless no_new_messages_found
    load_entire_page
  else
    @browser.scroll.to :top
  end
end
load_more_messages() click to toggle source
# File lib/okc_bot/browser.rb, line 49
def load_more_messages
  @before = @browser.spans(:class => "previewline").to_a.size
  @browser.scroll.to :bottom
  sleep 1
  @after = @browser.spans(:class => "previewline").to_a.size
end
load_session(saved_cookies) click to toggle source
# File lib/okc_bot/browser.rb, line 39
def load_session(saved_cookies)
  @browser.goto("https://okcupid.com")
  @browser.cookies.clear
  saved_cookies.each do |saved_cookie|
    @browser.cookies.add(saved_cookie[:name], saved_cookie[:value])
  end
  @browser.goto("https://okcupid.com")
end
login() click to toggle source

randomized delays between actions minimizes bot detection

# File lib/okc_bot/browser.rb, line 70
def login
  @browser.goto("http://www.okcupid.com")
  @browser.link(:text => "Sign in").click
  sleep (1..3).to_a.sample.to_i
  @browser.text_field(:id => 'login_username').set(@username)
  sleep (1..3).to_a.sample.to_i
  @browser.text_field(:id => 'login_password').set(@password)
  sleep (1..3).to_a.sample.to_i
  @browser.button(:id => 'sign_in_button').click
  sleep (1..3).to_a.sample.to_i

  return logged_in?
end
logout() click to toggle source
# File lib/okc_bot/browser.rb, line 107
def logout
  @browser.close
end
no_new_messages_found() click to toggle source
# File lib/okc_bot/browser.rb, line 56
def no_new_messages_found
  @before == @after
end
save_session() click to toggle source
# File lib/okc_bot/browser.rb, line 35
def save_session
  @browser.cookies.to_a
end
visit_im_history_page() click to toggle source
# File lib/okc_bot/browser.rb, line 95
def visit_im_history_page
  visit "imhistory"
end
visit_match_page() click to toggle source
# File lib/okc_bot/browser.rb, line 103
def visit_match_page
  visit "match"
end
visit_messages_page() click to toggle source
# File lib/okc_bot/browser.rb, line 85
def visit_messages_page
  visit "messages"
  load_entire_page

end
visit_quickmatch_page() click to toggle source
# File lib/okc_bot/browser.rb, line 91
def visit_quickmatch_page
  visit "quickmatch"
end
visit_sent_messages_page() click to toggle source
# File lib/okc_bot/browser.rb, line 99
def visit_sent_messages_page
  visit "messages?folder=2"
end

Private Instance Methods

logged_in?() click to toggle source
# File lib/okc_bot/browser.rb, line 28
def logged_in?
  # return @browser.h1(:id => 'home_heading').exists?
  return true
end
visit(page) click to toggle source
# File lib/okc_bot/browser.rb, line 17
def visit(page)
  begin
    @browser.goto "#{@base_url}/#{page}"
  rescue Errno::ECONNREFUSED
    puts "Webdriver reconnecting..."
    @browser  = Watir::Browser.new $driver.to_sym
    login
    @browser.goto "#{@base_url}/#{page}"
  end
end