PhantomJs:寻找一种编译表单的基本方法,点击并记录结果

PhantomJs:寻找一种编译表单的基本方法,点击并记录结果,phantomjs,Phantomjs,我第一次尝试幻影。我的目标是简单的页面自动化 我只需要 -加载一个网页,比如www.google.com -填写查询条件 -搜索结果页面的console.log 我遇到了一些问题,因为我发现所有的教程都是从太复杂的任务开始的 下面是我个人的分步教程,但这“结束”是一个问题:“提交后如何记录页面内容?” 我所做的第一步是: var page=require('webpage').create(); 第页打开('https://www.google.it,函数(){ console.log(page

我第一次尝试幻影。我的目标是简单的页面自动化

我只需要 -加载一个网页,比如www.google.com -填写查询条件 -搜索结果页面的console.log

我遇到了一些问题,因为我发现所有的教程都是从太复杂的任务开始的

下面是我个人的分步教程,但这“结束”是一个问题:“提交后如何记录页面内容?”

我所做的第一步是:

var page=require('webpage').create();
第页打开('https://www.google.it,函数(){
console.log(page.content);
幻影。退出()
});
这是有效的

然后我注入jquery

var page=require('webpage').create();
第页打开('https://www.google.it,函数(){
第页,包括http://code.jquery.com/jquery-1.10.1.min.js“,函数(){
console.log(page.content);
幻影。退出()
});
});
一种有效的方法

现在我正在尝试填充搜索框。我必须填好这个字段

<input autocomplete="off" class="lst" value="" title="Cerca con Google" maxlength="2048" name="q" size="57" style="...[omitted]...">
它正在工作。现在我需要“点击”提交按钮

<input class="lsb" value="Cerca con Google" name="btnG" type="submit">
当我看到图像时(只是为了以人的方式查看渲染结果),我会看到google.it页面上填充了“q”字段

问题是:

**真的是页面加载[是谷歌搜索]**

如何检测对console.log或page.render内容的页面更改?

编辑:我看到这个:

但这不是我需要的。我想检测页面加载何时完成,而不是“设置超时”来呈现页面

编辑2:我看到这个:

但这太复杂了,我不明白这是怎么回事

可能需要围绕setTimeout进行包装,但是,由于使用js对象,我正在寻找一种使用事件驱动的方法

onInitialPageLoaded (
  fillForm
  click
)

onSearchResultLoaded (
  render or log content of page
)

但我无法理解在PhantomJs中是否可能,以及如何实现它

PhantomJS本身不是一个测试框架。有些项目构建在PhantomJS之上,为测试目的提供方便的高级功能,例如

让我们用casperJs搜索“幻影”

var-links=[];
var casper=require('casper').create();
函数getLinks(){
var links=document.querySelectorAll('h3.ra');
返回Array.prototype.map.call(链接,函数(e){
返回e.getAttribute('href')
});
}
casper.start(函数(){
//现在通过再次填写表单来搜索“幻影”
this.fill('form[action=“/search”]”,{q:'phantomjs'},true);
});
casper.then(函数(){
//“phantomjs”搜索的聚合结果
links=links.concat(this.evaluate(getLinks));
});
casper.run(函数(){
//echo的结果非常漂亮
this.echo(links.length+“找到的链接:”);
this.echo('-'+links.join('\n-').exit();
});
来自Ariya Hidayat,幻影的创造者

如果你还没有看到CasperJS,去看看吧,这是一个 PhantomJS非常有用的伴侣


这在很大程度上取决于现场的内部结构。几乎所有的事情都是可能的,但有时你必须知道某个网站是如何运作的。一些内容是通过ajax加载的,因此您不会用钩子捕捉事件,因此这里最简单的方法是使用setTimeout。使用它,您将看到搜索按钮单击事件由于某种原因没有开始加载结果。要找到这个原因,你必须试验和阅读谷歌的代码,所以我认为你的问题几乎没有简单的答案。谢谢,但我的问题只与幻影有关