HTML/JavaScript 自动获取提交按钮链接(是否可以用Python自动化?)
我有一个网站,在上面我需要点击一个表单里的提交按钮。点击后会给我一个链接。我知道这个链接是由一个隐藏的值传递的参数组成的。我在想,是否可以写一个Python脚本或者其他什么东西,去访问这个网站,点击一些按钮,然后返回提交按钮生成的链接。如果可以的话,我该如何传递那个影响链接生成的额外参数呢?
提前谢谢你。
3 个回答
1
一旦你用 mechanize 下载了你的 HTML 数据,就像其他用户说的那样,你可以像下面这样使用 BeautifulSoup:
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html_data)
hidden_tag = soup.find('input',name='hiddenId',type='hidden')
hidden_value = hiddenId['value']
然后你可以用 urllib2 来构造一个 POST 请求,像这样:
import urllib
import urllib2
url = 'http://yoursite.com'
values = {'yourhiddenname' : hidden_value}
request = urllib2.Request(url, urllib.urlencode(values))
response = urllib2.urlopen(request)
result = response.read()
1
看看这个关于 urlib2
包的 文档。下面是你可以使用的代码,但文档里对发生了什么解释得非常清楚。
摘录:
import urllib
import urllib2
url = 'http://www.someserver.com/cgi-bin/register.cgi'
values = {'name' : 'Michael Foord',
'location' : 'Northampton',
'language' : 'Python' }
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
你需要使用一个像 BeautifulSoup 这样的 HTML 解析器,来获取当你点击按钮时被发送的参数名称和对应的值。
补充:
是的,你也可以使用 mechanize 来实现这个功能。你可以这样做(未测试):
from mechanize import Browser
br = Browser()
br.open("http://www.example.com/") # this would be your website
br.select_form(name="order") # change this to the name of your form
response = br.submit() # submits the form, just like if you clicked the submit button
print response.geturl() # prints the URL you are looking for
你需要根据你自己的网站或表单来调整这些代码,但大致上这样做应该可以解决问题。
如果你发现需要更多控制,可以查看 ClientForm 对象的 示例/文档。
1
如果你想用Python的话,可以试试Mechanize这个库。如果你只是想提取一些小而独特的HTML元素,那你也可以用Python的正则表达式来处理。想要更方便地操作HTML文档的话,使用BeautifulSoup可能会更有帮助,你可以把它和Mechanize或者Python结合起来使用。
其实这比你想象的要简单很多。