【问题标题】:How to submit a form with PhantomJS?如何使用 PhantomJS 提交表单?
【发布时间】:2015-04-14 13:32:40
【问题描述】:

我正在熟悉 PhantomJS。但我不能得到一件事。我有一个简单表单的页面:

<FORM action="save.php" enctype="multipart/form-data" method="GET" onSubmit="return doSubmit();">
    <INPUT name="test_data" type="text">
    <INPUT name="Submit" type="submit" value="Submit">
</FORM>

save.php 只是写下 test_data 值

所以我正在这样做:

page.evaluate(function() {
    document.forms[0].test_data.value="555";
    doSubmit();
});

渲染页面时,我看到文本字段为 555,但表单没有提交,并且 save.php 没有写下 test_data 值。所以doSubmit() 没有执行,是吗? doSubmit() 是一个简单的验证步骤,提交应该会加载下一页。

所以问题是:如何使用 PhantomJS 在页面上执行 javascript 代码?

【问题讨论】:

  • function doSubmit() { if(document.forms[0].test_data.value == "") { alert("Fill the field!"); return false; } return true; } 在这里,对不起,我忘了在我的问题中发布它。它只是在做验证。
  • 哦,我明白了。所以我只需要通过JS点击提交按钮?反正。如果我需要执行该功能,它会以这种方式工作还是有另一种方法?对不起,我跛脚。

标签: javascript phantomjs form-submit


【解决方案1】:

您似乎想提交表单。您可以通过不同的方式实现这一目标,例如

之后,您将不得不等到加载下一页。最好在提交表单之前注册page.onLoadFinished(其中包含您剩余的脚本)。

page.open(url, function(){
    page.onLoadFinished = function(){
        page.render("nextPage.png");
        phantom.exit();
    };
    page.evaluate(function() {
        document.forms[0].test_data.value="555";
        document.forms[0].submit();
    });
});

或者你可以等待:

page.open(url, function(){
    page.evaluate(function() {
        document.forms[0].test_data.value="555";
        document.forms[0].submit();
    });
    setTimeout(function(){
        page.render("nextPage.png");
        phantom.exit();
    }, 5000); // 5 seconds
});

【讨论】:

  • 这很奇怪,但正如我所见,最简单的方法是 document.forms[0].submit();但它不起作用。
  • 不,我正在使用 2.0.0,似乎是最后一个。也许问题出在其他地方?
  • 请注册onConsoleMessageonErroronResourceErroronResourceTimeout 活动。可能有错误。
  • 抱歉,我尝试将这些函数添加到代码中,但它们不起作用或幻像卡住了。我只是从文档中复制粘贴示例并将其放在 page.evaluate() 之后。没有任何效果 =\
  • 奇怪,我用了几种不同的方法,包括点击但没有一个不起作用。这么简单的任务怎么会惹出这么多麻烦。
猜你喜欢
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 2013-12-25
  • 1970-01-01
相关资源
最近更新 更多