【问题标题】:Python: clicking a button [duplicate]Python:单击按钮[重复]
【发布时间】:2013-02-25 08:45:44
【问题描述】:

我在单击此按钮时遇到问题,该按钮在 HTML 代码中如下所示:

<form method="post">
<br>
<input type="hidden" value="6" name="deletetree">
<input type="submit" value="Delete Tree" name="pushed">
</form>

需要生成的url如下: http://mysite.com/management.php?Category=2&id_user=19&deteletree=6&pushed=Delete+Tree

更新: 我试过了,但它不起作用:

form_data = urllib.urlencode({'Category' : '2', 'suid' : '19', 'deletetree' : '6', 'pushed' : 'Delete+Tree' })
urllib2.urlopen("management.php", form_data)

这是我的登录方式:

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13')] 
username = "user" 
password = "pass" 
USER_ID = '6'

    loginonsite = login("http://mysite.com/myprofile.php",
                        "login_username=%s&login_password=%s&suid=%s".format(username, password, USER_ID)

)

【问题讨论】:

  • 1.这似乎与python没有任何关系! 2. POST 请求中不能有 GET 参数。 HTTP 不是这样工作的!

标签: python button python-2.7 urllib2 urllib


【解决方案1】:

您可以使用请求来发帖。

import requests
data = {'Category' : '2', 'suid' : '19', 'deletetree' : '6', 'pushed' : 'Delete+Tree' }
response = requests.post('http://mysite.com/management.php', data=data)

print response.text

随着越来越多的网页内容是用 JavaScript 生成的,我发现自己现在正在使用 Selenium 的 webdriver 来直接驱动像 Chrome 这样的真实浏览器...

更新:听起来你需要先登录

现在,请求也可以通过 cookie。所以你发送一个登录请求你会这样做

login_data = data={'username': 'user', 'password': 'pass'
post_data = {
    'Category' : '2', 'suid' : '19', 'deletetree' : '6', 'pushed' : 'Delete+Tree'
}
login_response = requests.get('http://mysite.com/myprofile.php', data=login_data)
form_response = requests.post(
    'http://mysite.com/management.php',
     data=post_data, 
     cookies=login_response.cookies
)

因此,您进行登录,然后在下一个请求的响应中使用 cookie。应该管用。但显然我无法针对您的确切情况测试该代码。

【讨论】:

  • Python 比 Selenium Webdriver 快得多,这也是我开始学习这门语言的原因。代码返回错误页面,所以我认为链接没有正确构建。
  • 或者你需要一个会话 cookie,或者你需要一个 csrftoken ......因此我经常使用 webdriver。一个技巧是将它与虚拟帧缓冲区 Xvfb 一起使用。这样你就可以在无头服务器上使用它。
  • 页面出现什么错误? 500 还是 404?响应对象有一个.status_code 属性。
  • 该死的:请登录:(。我将在原帖中发布我登录的代码
  • 查看我的更新答案
猜你喜欢
  • 2014-07-14
  • 2012-10-16
  • 2018-03-31
  • 2020-10-16
  • 2021-04-07
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多