Python请求模块未发布到某些输入字段

时间:2019-04-23 20:59:31

标签: python html python-requests

我正在尝试从登录屏幕后面的网站抓取数据,但是在使用python请求模块中的post()方法发布部分登录信息时遇到了问题。

我已经获取了每个需要填写的HTML输入字段的名称,并将它们与所需的值一起放入字典中,然后将该字典传递给post()方法。

登录页面中的HTML:

<input name="ctl00$ContentPlaceHolder1$TextBox1" type="text" value="" id="ContentPlaceHolder1_TextBox1" tabindex="1" class="form-control " placeholder="username" required="">
<input name="ctl00$ContentPlaceHolder1$TextBox2" type="password" id="ContentPlaceHolder1_TextBox2" tabindex="2" class="form-control" placeholder="password" required="" value="">

然后,使用名称值创建传递给post()的字典

formData = { 
    "ctl00$ContentPlaceHolder1$TextBox1": "FakeUsername",            
    "ctl00$ContentPlaceHolder1$TextBox2": "FakePassword"
    }

r = session.get(loginUrl)  # get cookies necessary for login
r = session.post(loginUrl, data=formData)

这对于用户名字段正常工作,但不会在密码字段中发布密码。如果在发布数据后从登录页面读取HTML,我将得到:

<input name="ctl00$ContentPlaceHolder1$TextBox1" type="text" value="FakeUsername" id="ContentPlaceHolder1_TextBox1" tabindex="1" class="form-control " placeholder="username" required="" />
<input name="ctl00$ContentPlaceHolder1$TextBox2" type="password" id="ContentPlaceHolder1_TextBox2" tabindex="2" class="form-control" placeholder="password" required="" />

不再列出密码输入字段的“值”参数,甚至不作为空参数列出。当然,尝试登录后将不起作用。

我一直无法弄清楚为什么会这样。我已经确保填写任何隐藏的输入字段(EVENTVALIDATION,VIEWSTATE等),并且还要 看着网页标题,但仍然没有运气。

我要登录的网站是: https://panel.forcad.org/Default.aspx

我非常感谢您帮助我们找出问题所在。

1 个答案:

答案 0 :(得分:0)

您说您查看了标头,但是您应该能够使用请求标头和cookie复制浏览器的行为。尝试在已知成功的登录名上复制和cookie的确切参数。因此,即使您甚至可以使用请求发送已经想要的数据,也可以缩小范围。如果您无法使用有效的cookie重新登录,则它可能具有一些JS技巧,或者某些东西请求无法做到。在这种情况下,请进行更多逆向工程或尝试使用硒。 pyvirtualdisplay可以隐藏浏览器并可以使用JS来停止页面的加载(