如何使用PhantomJS提交表格?

use*_*803 6 javascript form-submit phantomjs

我熟悉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>
Run Code Online (Sandbox Code Playgroud)

并且save.php只记下test_data值

所以我这样做:

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

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

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

Art*_* B. 9

您似乎想提交表单.你可以用不同的方式实现这一点,比如

之后,您将不得不等到下一页加载.最好通过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();
    });
});
Run Code Online (Sandbox Code Playgroud)

或者你可以等一下:

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
});
Run Code Online (Sandbox Code Playgroud)