Python: войдите на веб-сайт с помощью urllib
Я хочу войти на этот сайт:https://www.fitbit.com/login Это мой код, который я использую:
import urllib2
import urllib
import cookielib
login_url = 'https://www.fitbit.com/login'
acc_pwd = {'login':'Log In','email':'username','password':'pwd'}
cj = cookielib.CookieJar() ## add cookies
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent','Mozilla/5.0
(compatible; MSIE 6.0; Windows NT 5.1)')]
data = urllib.urlencode(acc_pwd)
try:
opener.open(login_url,data,10)
print 'log in - success!'
except:
print 'log in - times out!', login_url
Я использую chrome для проверки элемента поля ввода, я пробовал много пар ключей, но никто не работает. Любой может помочь мне взглянуть на этот сайт? Какие правильные данные я показываю в моей переменной acc_pwd?
большое спасибо
2 ответов
вы забываете скрытые поля формы:
<form id="loginForm" class="validate-enabled failure form" method="post" action="https://www.fitbit.com/login" name="login">
<input type="hidden" value="Log In" name="login">
<input type="hidden" value="" name="includeWorkflow">
<input id="loginRedirect" type="hidden" value="" name="redirect">
<input id="disableThirdPartyLogin" type="hidden" value="false" name="disableThirdPartyLogin">
<input class="field email" type="text" tabindex="23" name="email" placeholder="E-mail">
<input class="field password" type="password" tabindex="24" name="password" placeholder="Mot de passe">
</form>
таким образом, вы можете обновить:
acc_pwd = {'login':'Log In',
'email':'username',
'password':'pwd',
'disableThirdPartyLogin':'false',
'loginRedirect':'',
'includeWorkflow':'',
'login':'Log In'
}
которые могут быть проверены их службой. Хотя, учитывая название поля disableThirdPartyLogin
, мне интересно, нет ли грязного javascript, связанного с действием отправки формы, которое фактически добавляет значение, прежде чем фактически делать сообщение. Вы можете проверить это с помощью инструментов разработчика и проанализированных значений POST.
тестирование, которое выглядит не так, хотя javascript добавляет некоторые значения, которые могут быть из cookies:
__fp w686jv_O1ZZztQ7FkK21Ry2MI7JbqWTf
_sourcePage tJvTQfA5dkvGrJMFkFsv6XbX0f6OV1Ndj1zeGcz7OKzA3gkNXMXGnj27D-H9WXS-
disableThirdPartyLogin false
email foo@example.org
includeWorkflow
login Log In
password aeou
redirect
вот мой взгляд на это с помощью запросов (который имеет лучший API, чем urllib ; -))
>>> import requests
>>> import cookielib
>>> jar = cookielib.CookieJar()
>>> login_url = 'https://www.fitbit.com/login'
>>> acc_pwd = {'login':'Log In',
... 'email':'username',
... 'password':'pwd',
... 'disableThirdPartyLogin':'false',
... 'loginRedirect':'',
... 'includeWorkflow':'',
... 'login':'Log In'
... }
>>> r = requests.get(login_url, cookies=jar)
>>> r = requests.post(login_url, cookies=jar, data=acc_pwd)
и не забудьте сначала попасть на страницу входа, используя get, чтобы заполнить куки-куки!
наконец, я не могу помочь вам дальше, так как у меня нет действительной учетной записи на fitbit.com и он мне не нужен. Поэтому я могу попасть только на страницу сбоя входа в систему для моего тесты.
edit:
для разбора вывода, то вы можете использовать:
>>> from lxml import etree
>>> p = etree.HTML(r.text)
например, чтобы получить сообщения об ошибках:
>>> p.xpath('//ul[@class="errorList"]/li/text()')
['Lutilisateur nexiste pas ou le mot de passe est incorrect.']
ресурсы:
- lxml:http://lxml.de
- запросы:http://python-requests.org
и они оба на pypi:
pip install lxml requests
HTH
У вас будет трудное время только с urllib
вам, вероятно, придется использовать утвержденные методы https://wiki.fitbit.com/display/API/Fitbit+API;jsessionid=7D918DE258862E80575153385C02507D
для чего потребуется токен oauth ... что потребует открытия веб-страницы и входа пользователя