HTML/JavaScript 自动获取提交按钮链接(是否可以用Python自动化?)

2 投票
3 回答
930 浏览
提问于 2025-04-15 21:39

我有一个网站,在上面我需要点击一个表单里的提交按钮。点击后会给我一个链接。我知道这个链接是由一个隐藏的值传递的参数组成的。我在想,是否可以写一个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结合起来使用。

其实这比你想象的要简单很多。

撰写回答