我第一次尝试 PhantomJs。我的目标是简单简单的页面自动化。
我只需要 - 加载一个网页,比如说 www.google.com - 填写查询词 - 只是(真的,只有这个)搜索结果页面的 console.log
我遇到了一些问题,因为我发现的所有教程都是从过于复杂的任务开始的。
以下是我个人的分步教程,但这个“结束”有一个问题:“如何在提交后记录页面内容?”
我做的第一步是:
var page = require('webpage').create();
page.open('https://www.google.it', function () {
console.log (page.content);
phantom.exit()
});
这有效。
然后我注入jquery
var page = require('webpage').create();
page.open('https://www.google.it', function () {
page.includeJs("http://code.jquery.com/jquery-1.10.1.min.js", function() {
console.log (page.content);
phantom.exit()
});
});
一个有效的。
现在我正在尝试填写搜索框。我必须填写这个字段
<input autocomplete="off" class="lst" value="" title="Cerca con Google" maxlength="2048" name="q" size="57" style="...[omitted]...">
我正在这样做:
var page = require('webpage').create();
page.open('https://www.google.it', function () {
page.includeJs("http://code.jquery.com/jquery-1.10.1.min.js", function() {
console.log (page.content);
var value = page.evaluate(function() {
$('input[name="q"]').val("Daduu");
return $('input[name="q"]').val();
});
console.log ("search term: " + value);
phantom.exit()
});
});
它正在工作。现在我需要“点击”提交按钮
<input class="lsb" value="Cerca con Google" name="btnG" type="submit">
这样做:
var page = require('webpage').create();
page.open('https://www.google.it', function () {
page.includeJs("http://code.jquery.com/jquery-1.10.1.min.js", function() {
var value = page.evaluate(function() {
$('input[name="q"]').val("Daduu");
$('input[name="btnG"]').trigger("click");
return $('input[name="q"]').val();
});
// console.log (page.content);
page.render("google.png");
phantom.exit()
});
});
当我看到图像时(只是为了以人性化的方式查看渲染结果),我看到了 google.it 页面,其中填充了“q”字段。
问题是:
**真的是页面加载[是谷歌搜索]?**
“如何检测到 console.log 或 page.render 内容的页面更改?”
编辑:我看到了:Phantomjs - 如何填充表单、提交并获取结果?
但这不是我需要的。我想检测页面加载何时完成,而不是“设置超时”来呈现页面。
编辑 2:我看到了:PhantomJS:提交表单
但这太复杂了,我不明白这是如何工作的。
可能需要围绕 setTimeout 进行包装,但是,由于使用 js 对象,我正在寻找一种方法来工作事件驱动
onInitialPageLoaded (
fillForm
click
)
onSearchResultLoaded (
render or log content of page
)
但我无法理解 PhantomJs 是否有可能,以及如何实现它!