Casperjs (PhantomJS) 网站更新后无法提交表格



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

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

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

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

我有以下来自卡斯珀的调试行:

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();
});

我也尝试等待包含结果的选择器,但它从未到达。

任何幻影/卡斯珀大师都有什么技巧吗?

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

this.click('form#form1');

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

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

仅此而已。

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

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

最新更新