如何编写Greasemonkey脚本来处理__doPostBack()

时间:2010-11-01 18:57:26

标签: javascript greasemonkey dopostback

我来自科学计算背景,并且有一些流行和非流行(ad hoc)编程语言的历史,但我完全不同于客户端编程和JavaScript。

我之前为我的Greasemonkey设置编写了一些简单的JavaScript,但仅此而已。

我的问题是:http://www.ise.org/sirketler/sirketler.aspx

我正在尝试从上面的URL(土耳其伊斯坦布尔证券交易所网站)中的表格中获取有关证券和公司的所有数据。

该数据在根据公司名称开始的字母分类的网格表中给出,并且每个网格最多可以给出10行。同样在页面的右下角,会显示此信息的传播页数。

例如,您可以从Firebug控制台调用:

__doPostBack('ctl00$cphContent$ctl00$lbtnT','')

让公司以'T'开头,您可以通过发出以下内容浏览这些表的标签:

__doPostBack('ctl00$cphContent$ctl00$radGridSirketler$ctl00$ctl03$ctl01$ctl05','')
__doPostBack('ctl00$cphContent$ctl00$radGridSirketler$ctl00$ctl03$ctl01$ctl07','')
__doPostBack('ctl00$cphContent$ctl00$radGridSirketler$ctl00$ctl03$ctl01$ctl09','')

等。分别为本表的第1页,第2页和第3页。

我试图通过为给定的字母和数字数组发出__doPostBack()方法来序列化它,方法是将它们连接到上面的固定字符串,但它没有成功。

那么我如何使用__doPostBack()方法并附加所有这些结果子表并获取整体数据?

是否有资源可供阅读此类任务?

我为所有JS黑客的业余问题道歉。

1 个答案:

答案 0 :(得分:1)

希望这个例子能够启发你的道路:

// ==UserScript==
// @name           Examples : sirketler
// @namespace      http://gm.wesley.eti.br/examples
// @description    Simulation of an aspx PostBack request
// @include        http://www.ise.org/sirketler/sirketler.aspx
// @require        http://userscripts.org/scripts/source/63808.user.js
// @require        http://userscripts.org/scripts/source/89515.user.js
// ==/UserScript==

AspxPostBackRequest({
    "url" : "http://www.ise.org/sirketler/sirketler.aspx",
    "manager" : "ctl00$ScriptManager1",
    "eventTarget" : "ctl00$cphContent$ctl00$lbtnT",
    "callback" : function(xhr)
    {
        var content = document.createElement("div");
        content.innerHTML = xhr.responseText.split("|")[3];

        alert(xpath("./div/table/tbody/tr", content).map(function(row)
        {
            return [].slice.call(row.cells).map(function(col)
            {
                return col.textContent.replace(/^\s+|\s+$/gm, "");
            });
        }).join("\n"));
    }
});