2015-03-27 5 views
1

Я пытаюсь очистить информацию от своих компаний Интранет, чтобы я мог отображать информацию на нашей офисной доске через личную панель. Я пытаюсь работать с предоставленной информацией от: This Site. Проблема, с которой я сталкиваюсь, кроме как быть noob, заключается в том, что для того, чтобы получить доступ к информации, которую я хочу очистить, мне нужно зайти в нашу интрасеть, имя пользователя на одной странице, затем отправьте другому, чтобы я мог указать свой пароль. Как только я войду в систему, я смогу связать и очистить данные.Скремблирование сайта, для которого требуется имя пользователя и пароль на двух отдельных страницах.

Вот некоторый исходный код от моего имени пользователя страницы входа:

<form action='loginauthpwd.asp?PassedURL=' method='post' style='margin: 0px;'><table border='0' cellspacing='1' width='999' height='350'><tr><td width='100'>&nbsp;</td><td valign='center' width='100'><table style='width: 350px; background-color: #EEEEEE; border: 1px solid gray;'><tr><td class='fontBlack' style='padding: 10px; vertical-align: top;'><span style='font-weight: bold;'>Username:</span><br><input type='text' class='normal' autocomplete='off' id='LoginUser' name='LoginUser' style='border: 1px solid gray; height: 16px; font-family: arial; font-size: 11; width: 180px;' maxlength='30'><input class='normal_button' type='button' value='Go' style='border: 1px solid gray; font-weight: bold; width: 80px; margin-left: 10px;' onclick="var username=document.getElementById('LoginUser').value; if (username.length > 2) { submit(); } else { alert('Enter your Username.'); }"></form> 

Вот некоторые источники из моей страницы пароля входа в системе:

<form action='loginauthprocess.asp?UserName=******&Page=&PassedURL=' target='_top' method='post' onsubmit='checkMyBrowser();' style='margin: 0px;'><table border='0' cellspacing='1' width='999' height='350'><tr><td width='100'>&nbsp;</td><td valign='center' width='100'><table style='width: 350px; background-color: #EEEEEE; border: 1px solid gray;'><tr><td class='fontBlack' style='padding: 10px; vertical-align: top;'><span style='font-weight: bold;'>Password:</span><br><input class='normal' type='password' autocomplete='off' id='LoginPassword' name='LoginPassword' style='border: 1px solid gray; height: 16px; font-family: arial; font-size: 11; width: 180px;' maxlength='30'><input class='normal_button' type='submit' value='Log In' style='border: 1px solid gray; font-weight: bold; width: 80px; margin-left: 10px;' onclick="var password=document.getElementById('LoginPassword').value; if (password.length > 2) { submit(); } else { alert('Enter your Password.'); }"></form> 

Используя сказал пример ресурса это то, что я думаю, что должно работать но не представляется:

require 'mechanize' 
@agent = Mechanize.new 
@agent.verify_mode = OpenSSL::SSL::VERIFY_NONE 

##Login Page: 
page = @agent.get 'http://www.website_here.com/intranet/login.asp' 

##Username Page: 
form = page.forms[0] 
form['USER NAME HERE'] = LoginUser 
##Submit User: 
page = form.submit 

##Password Page: 
form = page.forms[0] 
form['USER PASSWORD HERE'] = LoginPassword 
##Submit Password: 
page = form.submit 

Когда я проверяю свой код, я получаю следующее выход крыла:

test.rb: 10: в ` ': неинициализированная константа LoginUser (NameError)

Может кто-нибудь указать на то, что я делаю не так?

Благодаря

EDIT 3/27/15:

Использование @seoyoochan ресурса я пытался сформировать свой код так:

require 'rubygems' 
require 'mechanize' 
login_page = agent.get "http://www.website_here.com/intranet/loginauthusr.asp?Page=" 
login_form = login_page.form_with(action: '/sessions') 
user_field = login_form.field_with(name: "session[user]") 
user.value = 'My User Name' 

login_form.submit 

Когда я пытаюсь запустить свой код, который я теперь получаю этот выход:

test.rb: 4: in <main>': undefined local variable or method agent 'for main: Obje ct (NameError)

Мне нужен пример того, как назначить правильные имена/классы, с которыми будет работать моя предоставленная форма.

EDIT 4/4/15:

Хорошо, теперь используя @tylermauthe пример, который я пытаюсь проверить следующий код:

require 'mechanize' 
require 'io/console' 

agent = Mechanize.new 
page = agent.get('http://www.website_here.com/intranet/loginauthusr.asp?Page=') 

form = page.forms.find{|form| form.action.include?("loginauthpwd.asp?PassedURL=")} 

puts "Login:" 
form.login = gets.chomp 
page = agent.submit(form) 
pp page 

Теперь мои мысли, что этот код должен позволять мне ввести и отправить мое имя пользователя, приведя меня на следующую страницу, на которой будет запрашиваться мой пароль. НО, когда я пытаюсь запустить его и ввести свое имя пользователя, я получаю следующий вывод:

/var/lib/gems/1.9.1/gems/mechanize-2.7.3/lib/mechanize/form.rb : 217: в method_missing': undefined method loginUser = 'для # (NoMethodError) из scraper.rb: 10: в `'

Что я упускаю или вошли неправильно? Пожалуйста, обратитесь к моему первому редактированию, чтобы узнать, как кодируется моя форма. Также, чтобы быть ясным, я не кодировал формы таким образом. Я только пытаюсь узнать, как кодировать и очищать данные, необходимые для отображения в моем проекте Dash Dashboard.

+0

Вы отправили 2 реализации сейчас, как с разными проблемами. Какую реализацию вы предпочитаете? Мое предложение было бы решением, предложенным @seoyoochan. – tylermauthe

+0

@tylermauthe Честно говоря, меня не волнует, пока он войдет в систему и очистит данные и позволит мне отображать выходные данные на моем виджете в личном Dashboard. – rleigh

+0

После прочтения моего предыдущего комментария, я вижу, что его выводят из контекста. Быть ясным ... Я новичок в кодировании и хотел бы получить хороший пример, который позволит мне автоматически войти в систему по сценарию/коду, чтобы я мог попробовать и отобразить его на моем виджете. Спасибо за любую помощь! – rleigh

ответ

1

Я просто искал драгоценность Mechanize и нашел соответствующее решение. Вы должны установить правильное «имя» в полях ввода. В противном случае вы не можете принимать значения от них. Следуйте за этой статьей.

http://crabonature.pl/posts/23-automation-with-mechanize-and-ruby

+0

Спасибо, я посмотрю на это, когда приеду в офис сегодня. – rleigh

+0

yep, дайте мне знать, как это происходит. и я вижу некоторые потенциальные недостатки безопасности в форме. не помещайте javascript-код непосредственно в форму. и использовать систему аутентификации токенов, внедряя ее правильно. – seoyoochan

+0

Хорошо, я просто слишком новичок в этом, чтобы понять, что нужно сочетать в данных примерах, чтобы заставить что-то работать. Я немного поиграл и не могу получить свою первую страницу имени пользователя, чтобы указать свое имя в форме и отправить на следующую страницу, в которой будет запрашиваться мой пароль. – rleigh

0

Не уверен, что если вы нашли их, но Mechanize имеет довольно превосходные документы: http://docs.seattlerb.org/mechanize/GUIDE_rdoc.html

От них я играл в irb РЕПЛ, чтобы создать этот простой скребок, который регистрирует в GitHub: https://gist.github.com/tylermauthe/781f68add24819e207c4

+0

Спасибо, и я рассмотрю его и дам вам знать, как это получается. – rleigh

+0

Хорошо, я использовал ваш пример в своей среде и смог войти в Git. С учетом сказанного Git имеет поля User & Password на одной странице. В моем случае; Мне нужно сначала предоставить страницу с именем пользователя/отправкой, а затем снова предоставить пароль/отправить страницу. На этом этапе я войду в свою интрасеть, чтобы очистить данные. Я действительно верю, что вы сделали меня на один шаг ближе к вашему примеру «form.action». Моя форма тоже ноль. Итак, теперь уловка позволяет перемещаться по страницам имени пользователя и пароля. – rleigh

+0

Мне было интересно, почему поле пароля не было в хеше, когда вы сделали страницу pp ... – tylermauthe

1

Я смог войти в систему со следующим примером. Спасибо всем, кто помог мне со всеми ресурсами и примерами, чтобы учиться!

require 'nokogiri' 
require 'mechanize' 

agent = Mechanize.new 

# Below opens URL requesting username and finds first field and fills in form then submits page. 

login = agent.get('http://www.website_here.com') 
login_form = login.forms.first 
username_field = login_form.field_with(:name => "user_session[username]") 
username_field = "YOUR USERNAME HERE" 
page = agent.submit login_form 

# Below opens URL requesting password and finds first field and fills in form then submits page. 

login = agent.get('http://www.website_here.com') 
login_form = login.forms.first 
password_field = login_form.field_with(:name => "user_session[password]") 
password_field = "YOUR PASSWORD HERE" 
page = agent.submit login_form 

# Below will print page showing information confirming that you have logged in. 

pp page 

я нашел следующий пример из пользователя: Senthess HERE. Я все еще не 100% от того, что делает каждый отдельный код, если кто-то хочет потратить время и сломать его, пожалуйста, сделайте это. Это поможет мне и другим лучше понять.

Спасибо!