2016-06-14 3 views
1

Я прочитал несколько похожих тем. Я стараюсь следовать другим примерам, но я все еще застрял в середине нигде. У меня есть базовые навыки программирования на питоне и небольшие знания о http протокол, мои две цели: -succesfull аутентификации на веб-сайт с помощью запросов библиотеки -fetch данные с веб-сайта после входа в систему во время сеанса активенаутентификация python с библиотекой запросов через POST

Это код:

import requests 

targetws = 'https://secure.advfn.com/login/secure' 

s = requests.session() 

payload_data = {'login_username': 'xxx', 'login_password': 'yyy'} 

response = s.post(targetws, data=payload_data) 


url='https://it.advfn.com/mercati/BIT/generali-G/ordini' 

result = s.get(url) 

print result.content 

Но я всегда не добиваются успеха при входе в систему. Возможно, я пропустил какое-то значение в таких данных, как отправить действие, иначе? Любая помощь будет оценена, с наилучшими пожеланиями!

Здесь HTML код со страницы:

form action="https://secure.advfn.com/login/secure" id="login_form" name="login_form" method="POST" target=""> 

     <input type="hidden" value="aHR0cDovL2l0LmFkdmZuLmNvbQ==" name="redirect_url" id="redirect_url"> 
     <input type="hidden" value="it" name="site" id="site"> 

     <div class="fields"><label for="login_username">Username</label> 
      <input type="text" tabindex="1" class="text ui-widget-content" value ="" 
      id="login_username" name="login_username" maxlength="64"> 
     </div> 

     <div class="fields"><label for="login_password">Password</label> 
      <input tabindex="2" type="password" class="text ui-widget-content" value="" id="login_password" name="login_password" maxlength="16"> 
     </div> 
       <div class="fields"> 
        <strong><a href="/common/account/password/request">Se ti sei dimenticato la tua password</a></strong> &nbsp; 
        <input class="button" tabindex="3" type="submit" value="Accedi" id="login_submit"> 
       </div> 
    </form 
+0

Каков ответ, который вы получите, когда попытка входа в систему не удалась? Проверьте атрибуты 'status_code' и' text'. –

+0

Спасибо за ответ, код состояния всегда 200 и текста: 200 TraceBack (самый последний вызов последним): Файл "deepbook.py", строка 21, в печати result.text UnicodeEncodeError: 'ASCII' кодек не может encode character u '\ xe0' в позиции 909: порядковый номер не в диапазоне (128) – egariM

+0

Тип вашего соединения, ожидающий заголовок форматированного URL-адреса, и вы отправляете объект json. data = 'username =' + user + '& password =' ​​+ password header = { "Content-Type": "application/x-www-form-urlencoded; charset = UTF-8" } – DevD

ответ

1

Если вы посмотрите на то, что будет размещена:

enter image description here

Вы видите вы нуждаетесь в redirect_url и site, которые вы можете разобрать из вход в источник с bs4:

import requests 
from bs4 import BeautifulSoup 

data = {"redirect_url": "", 
     "site": "uk", 
     "login_username": "foo", 
     "login_password": "bar"} 

with requests.Session() as s: 
    log = "https://secure.advfn.com/login/secure" 
    r = s.get("http://uk.advfn.com/") 
    soup = BeautifulSoup(r.content) 
    redirect_url = soup.select_one("#redirect_url")["value"] 
    site = soup.select_one("#site")["value"] 
    data["redirect_url"] = redirect_url 
    p = s.post(log, data=data) 
    print(p.content) 
    print(s.get('https://it.advfn.com/mercati/BIT/generali-G/ordini').content) 

Как только вы сделаете это, вы будете успешно авторизованы.

+0

Код, который вы пишете, работает! Большое спасибо за эту помощь! Только несколько вопросов, чтобы понять мою ошибку. 1. Когда я использую s.post(), данные передаются по заголовку? 2. Вы сказали, что когда я вызываю https://secure.advfn.com/login/secure, я был перенаправлен на http://uk.advfn.com/, но как вы получаете этот сайт? Он закодирован base64 в redirect_url? Должен ли я каждый раз проверять эту переменную (redirect_url) в ответе на сообщение? Большое спасибо за помощь! – egariM

+0

4. Какое программное обеспечение используется для захвата заголовков? причина с расширением «live http header» для хром. Я думаю, что данные отправляются через файлы cookie после первого входа. Спасибо! – egariM

+0

Если вы посмотрите на исходный код, вы можете увидеть под входными тегами redirect_url и сайт, это просто вопрос анализа значений из тегов, чтобы получить то, что вам нужно для публикации. Если вы откроете инструменты для разработчиков Chrome или firebug, вы можете точно увидеть, что происходит на вкладке сети. –