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

casperjs (phantomjs) unable to submit form after website update

我有一个脚本 运行 有一段时间了,直到最近网站更新后。

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 大师有什么绝招?

您点击的不是提交按钮,而是整个表单。

this.click('form#form1');

处方集不是按钮,"clickable" 也不是。您应该寻找提交按钮并单击它。在这种情况下,我这样做是对的:

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

就是这样。

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

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