2015-02-10 23 views
1

我使用CasperJS(与slimerjs引擎)填写表单。然而,这不起作用。CasperJS不工作填充谷歌搜索字段

我用一个简单的脚本google.com尝试过:

var casper = require("casper").create({ 
    verbose: true, 
    logLevel: "debug" 
}); 

var fs = require("fs"); 

phantom.cookiesEnabled = true; 

casper.options.viewportSize = { width: 1024, height: 768 }; 

casper.start(); 

casper.userAgent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 

casper.thenOpen("http://www.google.com", function(response) { 
    casper.fill("form[id='gbqf']", { 
     q: "test" 
    }, true); 
}).run(); 

形式不填,什么也没有发生在页面加载后..详细日志状态:

[info] [remote] attempting to fetch form element from selector: 'form[id='gbqf']' 
[info] [phantom] Done 2 steps in 1086ms 

(然后结束)

我在做什么错?表单ID是100%正确的。

+0

如果你使用'#gbqf'选择器,它会有什么区别吗?谢谢。 – alecxe 2015-02-10 19:37:03

+0

@alecxe:现在的区别是它卡在第一个[info]远程尝试获取..并且永远不会达到第二个“完成2步”,否则这也失败 – Wesley 2015-02-10 19:39:19

回答

2

Google根据用户代理,视口大小,Cookie和其他指标提供不同的页面。你必须确保元素实际存在。您可以使用casper.exists()函数进行检查。

我发现一个很好的谷歌搜索选择器是"form[action='/search']"无论引擎(PhantomJS或SlimerJS)和用户代理字符串(有或没有声明为IE)。