casperjs(phantomjs)在网站更新后无法提交表格

时间:2017-07-26 06:42:25

标签: javascript jquery forms phantomjs

在网站更新后,我的脚本运行了一段时间。

https://www.vicroads.vic.gov.au/registration/buy-sell-or-transfer-a-vehicle/buy-a-vehicle/check-vehicle-registration/vehicle-registration-enquiry

我正在做的是填写表单,点击提交并抓取结果。

现在看来无论我做什么,点击,发送回车键等等表格都不会提交。

我有来自casper的以下调试行:

casperjs casper1.js
[info] [phantom] Starting...
[info] [phantom] Running suite: 4 steps
[debug] [phantom] opening url: https://www.vicroads.vic.gov.au/registration/buy-sell-or-transfer-a-vehicle/buy-a-vehicle/check-vehicle-registration/vehicle-registration-enquiry, HTTP GET
[debug] [phantom] Navigation requested: url=https://www.vicroads.vic.gov.au/registration/buy-sell-or-transfer-a-vehicle/buy-a-vehicle/check-vehicle-registration/vehicle-registration-enquiry, type=Other, willNavigate=true, isMainFrame=true
[debug] [phantom] url changed to "https://www.vicroads.vic.gov.au/registration/buy-sell-or-transfer-a-vehicle/buy-a-vehicle/check-vehicle-registration/vehicle-registration-enquiry"
[debug] [phantom] Successfully injected Casper client-side utilities
[info] [phantom] Step anonymous 2/4 https://www.vicroads.vic.gov.au/registration/buy-sell-or-transfer-a-vehicle/buy-a-vehicle/check-vehicle-registration/vehicle-registration-enquiry (HTTP 200)
[info] [phantom] Step anonymous 2/4: done in 1579ms.
[info] [phantom] Step _step 3/5 https://www.vicroads.vic.gov.au/registration/buy-sell-or-transfer-a-vehicle/buy-a-vehicle/check-vehicle-registration/vehicle-registration-enquiry (HTTP 200)
[info] [phantom] Step _step 3/5: done in 1599ms.
[info] [phantom] waitFor() finished in 40ms.
[info] [phantom] Step anonymous 4/5 https://www.vicroads.vic.gov.au/registration/buy-sell-or-transfer-a-vehicle/buy-a-vehicle/check-vehicle-registration/vehicle-registration-enquiry (HTTP 200)
[debug] [phantom] Mouse event 'mousedown' on selector: form#form1
[debug] [phantom] Mouse event 'mouseup' on selector: form#form1
[debug] [phantom] Mouse event 'click' on selector: form#form1
[info] [phantom] Step anonymous 4/5: done in 1691ms.
[info] [phantom] Step anonymous 5/5 https://www.vicroads.vic.gov.au/registration/buy-sell-or-transfer-a-vehicle/buy-a-vehicle/check-vehicle-registration/vehicle-registration-enquiry (HTTP 200)
[debug] [phantom] Capturing page to /var/www/html/poc/phantom/test.png
[info] [phantom] Capture saved to /var/www/html/poc/phantom/test.png
[info] [phantom] Step anonymous 5/5: done in 1964ms.
[info] [phantom] Done 5 steps in 1967ms
[debug] [phantom] Capturing page to /var/www/html/poc/phantom/test0.png
[info] [phantom] Capture saved to /var/www/html/poc/phantom/test0.png
[debug] [phantom] Navigation requested: url=about:blank, type=Other, willNavigate=true, isMainFrame=true
[debug] [phantom] url changed to "about:blank"
var casper = require('casper').create({
    verbose: true,
    userAgent: 'Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36',
    XSSAuditingEnabled: false,
    logLevel: 'debug',
    javascriptEnabled:'false',
    viewportSize: {
            width: 1280,
        height: 720
    },
    pageSettings: {
        ignoreSslErrors: true,
        loadImages: false, // do not load images
        loadPlugins: false, // do not load NPAPI plugins (Flash, Silverlight, ...)
        webSecurityEnabled: false,
        localToRemoteUrlAccessEnabled: false
    }
});

casper.start('https://www.vicroads.vic.gov.au/registration/buy-sell-or-transfer-a-vehicle/buy-a-vehicle/check-vehicle-registration/vehicle-registration-enquiry', function() {
   // Wait for the form
   this.waitForSelector('form#form1');
});

casper.then(function() {
   // fill the form
   this.fill('form#form1', { "ph_pagebody_0$phthreecolumnmaincontent_0$panel$VehicleSearch$RegistrationNumberCar$RegistrationNumber_CtrlHolderDivShown": "ZJD402" }, false);
   this.click('form#form1');
});

casper.then(function() {
        this.capture('test.png');
});

casper.run(function() {
    // dump
    this.capture('test0.png');
    //this.debugPage();
    this.exit();
});

我也试过等待包含结果的选择器,但它永远不会到达。

任何phantomjs / casperjs大师都有任何诡计吗?

1 个答案:

答案 0 :(得分:1)

您没有点击提交按钮,而是整个表单。

this.click('form#form1');

处方集不是按钮,因此不可点击"。您应该查找提交按钮并单击它。在这种情况下,我这样做:

this.click('"#main input[type='submit']"');

就是这样。

使用'form#form1'你实际上正在寻找submit,但我不认为直接在表单上调用submit会触发onClick事件附加到按钮,因此如果您想100%模拟用户操作,最好单击按钮而不是直接提交表单。

要直接提交表单,只需删除false方法末尾的fill属性。