coderrr

March 12, 2008

Quickly creating lots of Facebook accounts with FireWatir

Filed under: facebook, ruby — Tags: , — coderrr @ 8:17 am

What you’ll need:
1) A catch all email address or as many email addresses as users you want to create (fbook.1@yourdomain.com, fbook.2@yourdomain.com, …) which should all forward to a single email inbox. I used Postfix to setup virtual aliases which forward to my gmail account.
2) Ruby
3) FireWatir

A few months ago I wrote this script to quickly register a lot of accounts on Facebook. I registered 100 users in probably 10 minutes. I haven’t really made use of too many of them yet, but they can be useful for a lot of things, especially testing Facebook Apps. The script uses FireWatir, a browser automation tool written in Ruby which allows you to control a Firefox browser.

After you launch the script, it will navigate to the register page and fill in all necessary values for you except for the CAPTCHA. It will put the focus on the CAPTCHA field so all you have to do is type out the captcha and then press 0 (zero) to let the script know you’ve finished. At this point it will submit the registration and move onto the next user.

The script takes a single parameter, a starting number to append to the base email address. For each successive user it will increment this number. You’ll also want to change the BASE_EMAIL constant to match whatever your email addresses look like.

After you’ve run the script you’ll have a bunch of validation emails from Facebook sitting in your inbox. You need to turn off cookies in your browser, then go through and click every link. After that, all your accounts should be new, valid facebook accounts.

Here’s the script:


#!/usr/bin/ruby

# CHANGE THIS LINE TO YOUR EMAIL ADDRESS PATTERN, MUST CONTAIN <NUM>
BASE_EMAIL = "fbook.<NUM>@somedomain.com"

require 'firewatir'

email_start = (ARGV.shift || '1').to_i

# use FireWatir::Firefox.new(:profile => 'facebook')  if you want to use a specific profile
f = FireWatir::Firefox.new
(email_start..1000).each do |email_num|
  f.goto("https://www.facebook.com/r.php?r=102")
  f.text_field(:id, :name).value = "#{FIRST_NAMES.rand.capitalize} #{LAST_NAMES.rand.capitalize}"
  f.select_list(:id, :lifestage).value = '3'
  sleep 0.1
  f.text_field(:id, :reg_email__).value = BASE_EMAIL.sub(/<NUM>/, email_num.to_s)
  f.text_field(:id, :reg_passwd__).value = "aaaaaa"
  begin
    f.text_field(:id, :reg_passwd2__).value = "aaaaaa"
  rescue Exception
    nil
  end
  f.select_list(:id, :birthday_month).value = (1..12).rand
  f.select_list(:id, :birthday_day).value = (1..28).rand
  f.select_list(:id, :birthday_year).value = (1945..1987).rand
  captcha = f.text_field(:id, :captcha_response)
  captcha.focus
  sleep 0.1  while captcha.value !~ /0$/
  captcha.value = captcha.value.sub(/0$/,'')
  f.checkbox(:id, :terms).click

  f.button(:id, :submit_button).click
end

BEGIN {

class Range
  def rand
    Kernel.rand(self.end+1 - self.begin) + self.begin
  end
end

class Array
  def rand
    self[Kernel.rand(size)]
  end
end

# name lists shamelessly ripped from some most-common-names website
LAST_NAMES = ["SMITH", "JOHNSON", "WILLIAMS", "JONES", "BROWN", "DAVIS", "MILLER", "WILSON", "MOORE", "TAYLOR", "ANDERSON", "THOMAS", "JACKSON", "WHITE", "HARRIS", "MARTIN", "THOMPSON", "GARCIA", "MARTINEZ", "ROBINSON", "CLARK", "RODRIGUEZ", "LEWIS", "LEE", "WALKER", "HALL", "ALLEN", "YOUNG", "HERNANDEZ", "KING", "WRIGHT", "LOPEZ", "HILL", "SCOTT", "GREEN", "ADAMS", "BAKER", "GONZALEZ", "NELSON", "CARTER", "MITCHELL", "PEREZ", "ROBERTS", "TURNER", "PHILLIPS", "CAMPBELL", "PARKER", "EVANS", "EDWARDS", "COLLINS", "STEWART", "SANCHEZ", "MORRIS", "ROGERS", "REED", "COOK", "MORGAN", "BELL", "MURPHY", "BAILEY", "RIVERA", "COOPER", "RICHARDSON", "COX", "HOWARD", "WARD", "TORRES", "PETERSON", "GRAY", "RAMIREZ", "JAMES", "WATSON", "BROOKS", "KELLY", "SANDERS", "PRICE", "BENNETT", "WOOD", "BARNES", "ROSS", "HENDERSON", "COLEMAN", "JENKINS", "PERRY", "POWELL", "LONG", "PATTERSON", "HUGHES", "FLORES", "WASHINGTON", "BUTLER", "SIMMONS", "FOSTER", "GONZALES", "BRYANT", "ALEXANDER", "RUSSELL", "GRIFFIN", "DIAZ", "HAYES", "MYERS", "FORD", "HAMILTON", "GRAHAM", "SULLIVAN", "WALLACE", "WOODS", "COLE", "WEST", "JORDAN", "OWENS", "REYNOLDS", "FISHER", "ELLIS", "HARRISON", "GIBSON", "MCDONALD", "CRUZ", "MARSHALL", "ORTIZ", "GOMEZ", "MURRAY", "FREEMAN", "WELLS", "WEBB", "SIMPSON", "STEVENS", "TUCKER", "PORTER", "HUNTER", "HICKS", "CRAWFORD", "HENRY", "BOYD"]
FIRST_NAMES = ["JAMES", "JOHN", "ROBERT", "MICHAEL", "WILLIAM", "DAVID", "RICHARD", "CHARLES", "JOSEPH", "THOMAS", "CHRISTOPHER", "DANIEL", "PAUL", "MARK", "DONALD", "GEORGE", "KENNETH", "STEVEN", "EDWARD", "BRIAN", "RONALD", "ANTHONY", "KEVIN", "JASON", "MATTHEW", "GARY", "TIMOTHY", "JOSE", "LARRY", "JEFFREY", "FRANK", "SCOTT", "ERIC", "STEPHEN", "ANDREW", "RAYMOND", "GREGORY", "JOSHUA", "JERRY", "DENNIS", "WALTER", "PATRICK", "PETER", "HAROLD", "DOUGLAS", "HENRY", "CARL", "ARTHUR", "RYAN", "ROGER", "JOE", "JUAN", "JACK", "ALBERT", "JONATHAN", "JUSTIN", "TERRY", "GERALD", "KEITH", "SAMUEL", "WILLIE", "RALPH", "LAWRENCE", "NICHOLAS", "ROY", "BENJAMIN", "BRUCE", "BRANDON", "ADAM", "HARRY", "FRED", "WAYNE", "BILLY", "STEVE", "LOUIS", "JEREMY", "AARON", "RANDY", "HOWARD", "EUGENE", "CARLOS", "RUSSELL", "BOBBY", "VICTOR", "MARTIN", "ERNEST", "PHILLIP", "TODD", "JESSE", "CRAIG", "ALAN", "SHAWN", "CLARENCE", "SEAN", "PHILIP", "CHRIS", "JOHNNY", "EARL", "JIMMY", "ANTONIO", "DANNY", "BRYAN", "TONY", "LUIS", "MIKE", "STANLEY", "LEONARD", "NATHAN", "DALE", "MANUEL", "RODNEY", "CURTIS", "NORMAN", "ALLEN", "MARVIN", "VINCENT", "GLENN", "TRAVIS", "JEFF", "CHAD", "JACOB", "LEE", "MELVIN", "ALFRED", "KYLE", "FRANCIS", "BRADLEY", "JESUS", "HERBERT", "FREDERICK", "RAY", "JOEL", "EDWIN", "DON", "EDDIE", "RICKY", "TROY", "RANDALL", "BARRY", "ALEXANDER", "BERNARD", "MARIO", "LEROY", "FRANCISCO", "MARCUS", "MICHEAL", "THEODORE", "CLIFFORD", "MIGUEL", "OSCAR", "JAY", "JIM", "TOM", "CALVIN", "ALEX", "JON", "RONNIE", "BILL", "LLOYD", "TOMMY", "LEON", "DEREK", "WARREN", "DARRELL", "JEROME", "FLOYD", "LEO", "ALVIN", "TIM", "WESLEY", "GORDON", "DEAN", "GREG", "JORGE", "DUSTIN", "PEDRO", "DERRICK", "DAN", "LEWIS", "ZACHARY", "COREY", "HERMAN", "MAURICE", "VERNON", "ROBERTO", "CLYDE", "GLEN", "HECTOR", "SHANE", "RICARDO", "SAM", "RICK", "LESTER", "BRENT", "RAMON", "CHARLIE", "TYLER", "GILBERT", "GENE", "MARC", "REGINALD", "RUBEN", "BRETT", "ANGEL", "NATHANIEL", "RAFAEL", "LESLIE", "EDGAR", "MILTON", "RAUL", "BEN", "CHESTER", "CECIL", "DUANE", "FRANKLIN", "ANDRE", "ELMER", "BRAD", "GABRIEL", "RON", "MITCHELL", "ROLAND", "ARNOLD", "HARVEY", "JARED", "ADRIAN", "KARL", "CORY", "CLAUDE", "ERIK", "DARRYL", "JAMIE", "NEIL", "JESSIE", "CHRISTIAN", "JAVIER", "FERNANDO", "CLINTON", "TED", "MATHEW", "TYRONE", "DARREN", "LONNIE", "LANCE", "CODY", "JULIO", "KELLY", "KURT", "ALLAN", "NELSON", "GUY", "CLAYTON", "HUGH", "MAX", "DWAYNE", "DWIGHT", "ARMANDO", "FELIX", "JIMMIE", "EVERETT", "JORDAN", "IAN", "WALLACE", "KEN", "BOB", "JAIME", "CASEY", "ALFREDO", "ALBERTO", "DAVE", "IVAN", "JOHNNIE", "SIDNEY", "BYRON", "JULIAN", "ISAAC", "MORRIS", "CLIFTON", "WILLARD", "DARYL", "ROSS", "VIRGIL", "ANDY", "MARSHALL", "SALVADOR", "PERRY", "KIRK", "SERGIO", "MARION", "TRACY", "SETH", "KENT", "TERRANCE", "RENE"]

}

No Comments Yet »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

Blog at WordPress.com.