我正在尝试访问需要登录信息的网站。为了练习我尝试进入Hotmail只是为了看它是否会起作用。我不知道这段代码是否正确。通过反复试验,我得到了代码"运行",但它还没有工作......有人可以帮助我吗?
谢谢, 布兰登
Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25:23) [MSC v.1600 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
import urllib.request
import webbrowser
url = 'http://hotmail.com'
data = urllib.parse.urlencode({'idDiv_PWD_UsernameExample' : 'email','idDiv_PWD_PasswordExample' : 'password'})
binary_data = data.encode('utf8')
results = urllib.request.urlopen(url, binary_data)
html = results.geturl()
print (html)
答案 0 :(得分:0)
Cookie 。然后可能需要执行以下步骤:
但是感谢"包括电池",它并不那么难,我只是尝试了下面的例子与Horde群件:
import urllib.request
import http.cookiejar
import urllib.parse
cookiejar = http.cookiejar.CookieJar()
loginpage = "https://example.com/login.php"
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookiejar))
data = {'user': 'username', 'pw': 'password'} # + what else might be required
binData = urllib.parse.urlencode(data).encode('utf-8')
result = opener.open(loginpage) # without credentials, to get cookie
result.read()
for c in cookiejar: # just debugging to see if we got a cookie
print(c)
result = opener.open(loginpage, binData) # now send the crendentials
page = result.read().decode() # read() will read after redirects!
f = open("out.html", "w") # store output in a file
f.write(page) # if everything worked, this should look
f.close() # like the landing page
请注意,大多数网站都需要 Javascript ,而Python无法处理。我建议您在浏览器中禁用Javascript,清除您尝试访问的站点中的所有cookie,然后使用Firebug仔细查看该过程并查看哪些信息(Cookie,GET / POST参数,重定向等) 。)被传递以进行登录过程。然后你可以尝试使用python重新创建它。
Hotmail.com似乎是使用登录表单的次优起点。如果您查看源代码(如果您使用Firefox,我强烈建议Firebug),您可以看到&#34;真实&#34;输入字段不是您似乎尝试使用的<div>
,而是这一个:
<input type="email" lang="en" name="login" id="i0116" maxlength="113"
class="ltr_override" aria-labelledby="idLbl_PWD_Username">
,密码包含在这个
中<input type="password" name="passwd" id="i0118" autocomplete="off"
aria-labelledby="idDiv_PWD_PasswordExample">
如果您在输入字段中输入虚拟(或真实)信息并尝试登录,您可以在Firebug&#34; Network&#34;标签,发送更多信息:
LoginOptions 3
NewUser 1
PPFT {very long encoded string}
PPSX Pas
i1 0
i12 1
i13 0
i14 226
i15 2270
i17 0
i18 __Login_Strings|1,__Login_Core|1,
i2 1
i3 92877
i4 0
i7 0
idsbho 1
login username123@example.com
passwd password456
sso 0
type 11
login
和password
可能已足够,但由于我没有Hotmail帐户,因此我无法进行进一步测试。你使用urllib.request的一般方法似乎没问题(除了geturl
完全相同,它得到一个URL,所以你应该将变量html重命名为更好的东西)。