作者ckclark (大资佬)
看板Python
标题Re: [问题] 模拟提交表单
时间Sun Sep 16 12:45:32 2012
※ 引述《amigcamel (阿吉amig)》之铭言:
: 如题
: 我想用python模拟提交表单
: 以这个网址为例子:http://www.frdic.com/dict/vas/
: 这是一个法文字典的网站
: 我查询的是'vas'这个字
: 而在网页中有一个叫做「变位时态选择」的选单
: 比如说我点了「先将来时 - Indicatif Future Antérieur」
: 网页出现新的资料
: 然後我要把它抓下来
: 我试着用mechanize这个模组去做
: 但不知道哪里卡住总是不成功...
: 我想或许某些python内建的模组像是urllib就可以达成
: 只是我也不太熟...
: 拜托有人可以帮帮忙吗?
: -------------------------------------------
: 我把我的snippet po在这好了:
: import mechanize
: url = 'http://www.frdic.com/dict/vas/'
: br = mechanize.Browser()
: br.open(url)
: br.select_form('aspnetForm')
: control = br.form.controls[17]
: control.value = ['14'] # 「先将来时 - Indicatif Future Antérieur」的value为'14'
: br.submit()
: data = br.response().read()
: #结果又是跟没有提交表单是一样的...
从source code看出来他用ajax来实现这部分
function addCgLbSelectedEvent() {
$("
#cg_select").change(function () {
$("
#cg_select option").each(function () {
if ($(this).attr("selected")) {
var a = $("#dicTabs").find("#tab_cg"),
b = a.find("input");
$.ajax({
type: "POST",
url: "/Services/dicServices.asmx/GetTabExpWithCgIdx",
data: "{tabStatus:'" + b.attr("value") + "', whichCg:" +
$(this).attr("value") + "}",
contentType: "application/json",
dataType: "json",
success: function (b) {
a.find("#CgMain").html(b.d)
}
})
}
})
})
}
要仔细研究他怎麽传的是可以
也可以用一些有 web dev的浏览器就可以看他post的资料是什麽
然後模拟他送的header照着做一次就行了
我刚试了一下 回传的Content-Type也是json 照他ajax的写法 会取代掉
<div id="CgMain">里的html
code:
http://codepad.org/gBqKlkfd
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.32
1F:推 amigcamel:感谢!成功了! 09/17 19:20