2013-12-17 31 views
0

我碰到这样一个问题:How to use Python to login to a webpage and retrieve cookies for later usage?记录与蟒蛇成子页(从另一个岗位)

所以,我试图登录到一个页面,(使用请求的方法,second answer)。

当我打印使用

print request.text 

这将打印登录页面的HTML代码的HTML,但不是说我把要求的子页面。

是否存在代码问题(我不认为)还是我的代码?

该代码类似于该问题上的代码,具有不同的页面和用户名。

谢谢!

from requests import session 

USERNAME = 'myuser' 
PASSWORD = 'mypwd' 

payload = { 
    'action': 'login', 
    'username': USERNAME, 
    'password': PASSWORD 
} 

with session() as c: 
    c.post('https://www.bricklink.com/login.asp', data=payload) #Login page 
    request = c.get('http://www.bricklink.com/orderExcelFinal.asp?') #Page I want to access 
    print request.headers 
    print request.text 

输出

HTML code for the Login page, but not the page I want to access 
+0

如果您向我们展示了您的代码(您可以制作页面和用户名),这将有所帮助。 – Gerrat

+0

我没有发布它,因为它与另一个问题的第二个答案完全一样。我只是在测试它。不过,我会重新发布它。谢谢! –

+0

您的第二次请求可能是无效页面,只是将您发送回登录页面。第二个链接看起来有点腥......通常当一个URL以一个问号结束时,它后面有参数。如果你要手动登录,然后请求这个页面(正好),它会出现吗? – Gerrat

回答

2

您的代码不发送的登录请求正确的数据。

每个网页是不同的,并且为了登录发送不同的数据此致结构应当是这样的:

from requests import session 

USERNAME = 'myuser' 
PASSWORD = 'mypwd' 

query = { 
    'logInTo': '', 
    'logFolder': 'p', 
    'logSub': 'w', 
} 

payload = { 
    'a': 'a', 
    'logFrmFlag': 'Y', 
    'frmUsername': USERNAME, 
    'frmPassword': PASSWORD, 
} 

with session() as c: 
    c.post('https://www.bricklink.com/login.asp', params=query, data=payload) #Login page 
    request = c.get('http://www.bricklink.com/orderExcelFinal.asp') #Page I want to access 
    print request.headers 
    print request.text 

在未来,当你需要找出哪些数据需要发送在尝试提交表单时,您应该使用Chrome或Firefox的开发人员工具。使用这些来记录您的登录尝试,然后相应地构建数据。开始使用Chrome的开发人员工具有点超出了这个答案的范围,但网络上有很多很好的资源,用于了解如何获取此信息。

+0

优秀的答案!特别感谢关于Chrome开发工具的最后一篇技巧,我不知道在哪里找到这样的东西。干杯! –