2014-08-02 1 views
0

Я знаю, что здесь было много примеров, объясняющих, как войти на сайт с Python, но я пробовал последние 3 дня, и мне не удалось заставить что-нибудь работать. Возможно, это связано с тем, что Python совершенно для меня совершенно, поэтому, пожалуйста, простите мое невежество.Вход на сайт с python, я пробовал много примеров, но что я делаю неправильно?

Способ, который меня больше всего привлекает, заключается в использовании запросов, так как это, кажется, самый короткий путь.

Я сделал тестовый аккаунт на этом сайте, так что вы, ребята могли бы проверить свои собственные вещи, если вы хотите:

import requests 

# variables 
login_url = 'http://www.helifreak.com/' 
username = 'testsubject' 
password = 'password123' 
login_data = {'vb_login_username' : username, 'vb_login_password' : password} 


# making headers to look like a web browser 
hf_headers = {'User-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'} 

# creation of the session and login 
s = requests.Session() 
login = s.post(login_url, data=login_data, headers=hf_headers) 

# printing the output to check if the login worked 
print login.content 

Похоже, что в этом примере, содержание, которое печатает выставки я не вошел в систему.

Я чувствую себя немного плохо, спрашивая об этом, учитывая количество примеров там, которые должны помочь мне, но это действительно сводило меня с ума, я просто не понимаю, почему это не работает ,

Единственное, что я мог придумать, - это мой логин_данные, определяющие «имя» ввода, в то время как я видел, как несколько человек используют «идентификатор» этого ввода. Хотя, моя страница, похоже, не имеет «идентификатора» для ввода пароля или имени пользователя, и я также читал здесь, используя «имя» в порядке.

Заключение: Я в замешательстве. Любая помощь будет принята с благодарностью.

Спасибо.

+0

Атрибут действия для формы входа - 'login.php? Do = login', поэтому вам не кажется, что вы публикуете правильный URL. – IanAuld

+0

Спасибо за понимание, как вы это нашли? – bram

+0

Использование инструментов chrome dev. Как только я нахожу регистрационную форму, я проверил ее и проверил, что это за атрибут. Этот URL-адрес - это URL-адрес, по которому фирма отправляет данные так, чтобы это был буквальный URL, на который вы не отправляли сообщения. – IanAuld

ответ

1

Посмотрев на источник HTML, который вы при условии, что я понял, что URL, который вы должны разместить на это:

http://www.helifreak.com/login.php 

Второе, что вам нужно сделать, это выяснить, какая функция md5hash делает и делает то же самое в вашей программе Python перед POST.

Я только что нашел местоположение функции md5hash. Он определен здесь: http://www.helifreak.com/clientscript/vbulletin_md5.js. То, что они там делают, - это поля формы хэширования с использованием алгоритма MD5, а затем присваивать хэш значениям поля. Вам нужно будет сделать то же самое на Python, если вы хотите успешно войти в систему.

Решение проблемы. Это было проще, чем я думал, но вам нужно будет использовать Mechanize (Судо пип установить Mechanize), потому что есть много скрытых полей, которые вам нужно будет заполнить, если вы используете «запросы»:

>>> import md5 
>>> import mechanize 
>>> br = mechanize.Browser() 
>>> r=br.open("http://www.helifreak.com") 
>>> for f in br.forms(): 
...  if (f.action == 'http://www.helifreak.com/login.php'): 
...    ff=f 
... 
>>> m=md5.new() 
>>> m.update('password123') 
>>> d=m.hexdigest() 
>>> ff.set_all_readonly(False) 
>>> ff.set_value(d,'vb_login_md5password') 
>>> ff.set_value(d,'vb_login_md5password_utf') 
>>> ff.set_value('testsubject','vb_login_username') 
>>> br.form=ff 
>>> r=br.submit() 
>>> print r.read() 

Последние отпечатанный ответ показал, что логин был успешным.

+0

Большое спасибо за это понимание. Итак, что вы говорите, я должен hash login_data (например, с использованием hashlib) и опубликовать значения таким образом? – bram

+0

Вам нужно открыть эту функцию javascript и посмотреть, что они делают именно для вызова: md5hash (vb_login_password, vb_login_md5password, vb_login_md5password_utf, 0). После анализа * md5.js script, я понял, что они берут pwd из vb_login_password и сохраняют его MD5 в полях vb_login_md5password и vb_login_md5password_utf. Я могу попытаться написать эквивалентный код Python, если позволяет время, но вы также можете попробовать сделать это сами. –

+0

Обновление последнего ответа имеет код, который работает. Удачи! –

 Смежные вопросы

  • Нет связанных вопросов^_^