如何使用 PhantomJS 提交表单?
How to submit a form with 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>
而 save.php 只是写下 test_data 值
所以我这样做了:
page.evaluate(function() {
document.forms[0].test_data.value="555";
doSubmit();
});
呈现页面时,我看到文本字段为 555,但表单未提交且 save.php 未写下 test_data 值。所以 doSubmit()
没有执行,是吗? doSubmit()
是一个简单的验证步骤,提交应该加载下一页。
所以问题是:如何使用 PhantomJS 在页面上执行 javascript 代码?
您似乎要提交表格。您可以通过不同的方式实现这一目标,例如
- clicking the submit button
submit the form 在页面上下文中:
page.evaluate(function() {
document.forms[0].submit();
});
或关注表单文本字段并使用 sendEvent() 发送回车键。
之后您将不得不等待下一页加载。最好在提交表单之前注册 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
});
我越来越熟悉 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 代码?
您似乎要提交表格。您可以通过不同的方式实现这一目标,例如
- clicking the submit button
submit the form 在页面上下文中:
page.evaluate(function() { document.forms[0].submit(); });
或关注表单文本字段并使用 sendEvent() 发送回车键。
之后您将不得不等待下一页加载。最好在提交表单之前注册 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
});