张贴表格,然后下载其他网页
Post form and then download other webpage
我想开发一个能做两件事的工具:
-
设置以下web表单的语言和日期:http://ibreviary.com/m2/opzioni.php,然后
-
在同一网站上下载不同页面的文本,但保留这些设置。例如http://ibreviary.com/m2/breviario.php?s=lodi.
该工具应该模仿用户正常浏览这些页面时的操作:设置所需的语言和日期,然后查看动态创建的页面。
我认为Node.js会是一个很好的工具。尽管我能够让它发布表单数据(我想),然后下载所需的页面,但我无法让服务器"记住"设置(就像在真实的网络浏览器会话中一样)。下载的文本始终是默认文本(今天的日期)。
以下是我迄今为止拥有的Javascript代码:
var FormData = require('form-data');
var request = require('request');
var http = require('http');
var fs = require('fs');
var formData = {
lang: 'en',
giorno: 15,
mese: 11,
anno: 2014
};
request.post({url:'http://www.ibreviary.com/m/opzioni.php',
formData: formData},
function optionalCallback(err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
download(url, destination, function(){
console.log("Done saving file '" + destination +
"' downloaded from '" + url + "'");
});
});
var url = "http://www.ibreviary.com/m/breviario.php?s=lodi";
var destination = "file.html";
var download = function(url, destination, callback) {
var file = fs.createWriteStream(destination);
var request = http.get(url, function(response) {
response.pipe(file);
file.on('finish', function() {
file.close(callback); // close() is async, call callback
// after close completes.
});
}).on('error', function(err) { // Handle errors
fs.unlink(destination); // Delete the file async.
if (callback) callback(err.message);
});
};
如果你尝试一下,你会看到第一个request.post
的输出是未更改的网页:就好像表单的发布不起作用一样。
有什么想法吗?
最后,我使用Python的mechanize
包来完成我想要的任务。
以下是对我有效的最低工作示例:
#!/usr/bin/python
import re
import mechanize
optionsURI = "http://www.ibreviary.com/m2/opzioni.php"
hourURI = "http://www.ibreviary.com/m2/breviario.php?s=lodi"
br = mechanize.Browser()
# Open the options form and submit the desired data.
br.open(optionsURI)
br.select_form(nr=0) # Select the first (and only) form on the page.
br.form["anno"] = "2014" # year
br.form["mese"] = ["11"] # month
br.form["giorno"] = "15" # day
br.form["lang"] = ["en"] # language or rite:
# it, en, es, fr, pt, ro, ar, ra, la, vt
br.submit()
# Open the desired page and print to standard output.
mypage = br.open(hourURI)
print mypage.read()
相关文章:
- 网页上失败的javascript会导致所有其他脚本失败
- 在php中的同一网页上检索所选下拉项的值,并使用其他数据将其发布到其他表单
- 使用 jquery 在我的网站中加载其他网页不起作用
- 如何从电子邮件内容中调用具有隐藏参数的其他网页
- 如何从其他网页获取图像并在我的网站上显示
- 如何使用其他名称调用网页
- 需要解析其他网页的值.首先,我需要调用其他网页并从中解析 XML 值
- 从其他网站单击网页上的按钮时刷新外部网页
- 需要检测网页中哪个<脚本>块与哪些其他<脚本>块交互
- 如何使用 JavaScript 将网页的元素复制到其他网页
- Javascript 函数创建自己的 ,但在此过程中删除网页上的所有其他
- 在其他网页中将图表和选择框作为“小部件”包含在内
- 如何在单击输入时重定向到其他网页
- 从其他网页打开模式网页
- 张贴表格,然后下载其他网页
- 如何在我的网页上显示JavaScript和其他代码,以便可以复制
- 如何将图像放置在网页上其他图像的指定像素处
- 当用户在网页上选择一大块文本时,是否有一种方法可以使该文本保持高亮显示,即使用户在该页面的其他地方单击也是如此
- 通过JQuery获取其他网页的html源/文本
- 嵌入在其他网页中的网页