触发来自URL的按钮点击

时间:2018-07-03 05:36:59

标签: web-scraping coldfusion coldfusion-9

我们需要每周刮一次VEEC Website 来获取总数。

例如,在2016年10月17日至2016年10月23日那一周,URL返回数字总计167,356 ,当点击搜索按钮时。我们希望将此号码存储在我们的数据库中。

我正在使用ColdFusion生成每周日期作为参数,并且像上面的URL一样传递它们。但是我找不到查询参数,因此无法触发“搜索”按钮的单击事件。

我尝试过像thisthis一样,但似乎没有任何作用。

有指针吗?

2 个答案:

答案 0 :(得分:2)

似乎为每个表单提交都添加了CRSF令牌,以防止恶意活动。更糟糕的是,对于每个表单提交(不仅针对每个用户),都更改了CRSF令牌,这实际上使其无法绕开。

当我向此表单发出CFHTTP POST请求时,我获得了HTML FileContent,但是结果表单元格占位符中没有DB数据。在我看来,表单所有者允许通过HTTP请求提交表单,但是如果无法验证CRSF令牌,则不会返回任何数据库数据。

也许值得询问网站所有者,是否可以使用某种REST API,...

答案 1 :(得分:0)

如果您要为此使用无头浏览器PhantomJS(https://en.wikipedia.org/wiki/PhantomJS),请使用以下脚本将总数保存到文本文件中。

在命令提示符下,安装PhantomJS后,运行phantomjs.exe main.js

main.js


"use strict";

var firstLoad = true;

var url = 'https://www.veet.vic.gov.au/Public/PublicRegister/Search.aspx?CreatedFrom=17%2F10%2F2016&CreatedTo=23%2F10%2F2016';

var page = require("webpage").create();

page.viewportSize = {
    width: 1280,
    height: 800
};

page.onCallback = function (result) {
    var fs = require('fs');
    fs.write('veet.txt', result, 'w');
};

page.onLoadStarted = function () {
    console.log("page.onLoadStarted, firstLoad", firstLoad);
};

page.onLoadFinished = function () {

    console.log("page.onLoadFinished, firstLoad", firstLoad);

    if (firstLoad) {

        firstLoad = false;

        page.evaluate(function () {
            var event = document.createEvent("MouseEvents");
            event.initEvent("click", true, true);
            document.querySelectorAll(".dx-vam")[3].dispatchEvent(event);
        });

    } else {

        page.evaluate(function () {
            var element = document.querySelectorAll('.dxgv')[130];
            window.callPhantom(element.textContent);
        });

        setTimeout(function () {
            page.render('veet.png');
            phantom.exit();
        }, 3000);

    }

};

page.open(url);

该脚本不是完美的,如果您感兴趣,可以对其进行处理,但是这样可以将总数保存到文件veet.txt中并保存屏幕快照veet.png