使用CasperJS和PhantomJS爬取谷歌关键词工具

19

我目前正在尝试使用CasperJS和PhantomJS(两个非常出色的工具,感谢n1k0和Ariya)来爬取Google关键字工具,但我无法使其正常工作。

这是我的当前流程:

  1. 使用我的Google帐户登录(以避免在关键字工具中遇到验证码)。
  2. 导航到关键字工具页面。
  3. 填写搜索表单并按下Search按钮。

我卡在第3步:搜索表单不是普通的HTML表单,因此我无法使用Casper#fill()。相反,我直接访问字段。以下是我尝试更改Word or phrase字段值的一些语法:

this.evaluate(function() {

    // Trying to change the value...
    document.querySelector('textarea.sP3.sBFB').value = 'MY SUPER KEYWORDS';
    document.querySelector('textarea.sP3.sBFB').setAttribute('value', 'MY SUPER KEYWORDS');
    document.querySelector('textarea').value = 'MY SUPER KEYWORDS';   // there's only one <textarea> on the page

    // Trying to change other attributes...
    document.querySelector('textarea.sP3.sBFB').textContent = 'MY SUPER KEYWORDS';
    document.querySelector('textarea').style.backgroundColor = 'yellow';
});

一切都不起作用。我在Casper#capture()后面执行,以查看字段包含什么内容。如您所见,它确认我在正确的页面上并且已登录,但是<textarea>为空。

奇怪的是,我可以访问DOM的其他部分:通过执行以下操作,我可以更改一个链接的文本,该链接说高级选项和过滤器___VINCE SAYS HELLO___(请参见截图):

this.evaluate(function() {
    document.querySelector('a.sLAB').textContent = '___VINCE SAYS HELLO___';
});

顺便说一句,我知道爬取Google关键词工具是违反服务条款的,但我认为这个问题可能会引起任何试图爬取JavaScript/Ajax重载站点的人的兴趣。


你可能需要等待这个文本区域被加载并可用。请查看waitForSelector()的文档 - NiKo
谢谢你的及时回复,NiKo。 我已经尝试了你的建议。实际上,你在这里看到的代码是包含在一个WaitFor()语句中的。我尝试了一个WaitForSelector('textarea.sP3.sBFB')和一个使用__utils__.exists()测试字段存在性的函数的WaitFor(),但都没有起作用。 - AngularChef
3个回答

1
document.querySelector('textarea.sP3.sBFB').value = 'MY SUPER KEYWORDS';

在文本区域上不能使用elt.value。你尝试过使用elt.textContent吗?


1
为什么你要尝试抓取结果?Google已经为我们创建了一个CSV文件。尝试下载那个。链接选择器必须像$('.gux-combo gux-dropdown-c .sJK')这样。你会用它来自动化吗?

1
什么CSV文件?那只是一个白日梦。这样的东西就像独角兽一样!不存在的。 - Henley
请前往调查AdWords关键词面板,那里有一个不再隐藏的部分,您可以检索触发广告的所有关键字组合。对我来说,这是一座金矿。 - Erdinç Çorbacı
@ErdinçÇorbacı,您指的是哪个部分?谢谢。 - simion314

0
我不确定这里到底发生了什么,但是你用于定位的类与我的不同。我猜你试图定位的 OneBoxKeywordsInputPanel-input 文本区域有第二个类名 sPFB,没有其他类名。这些神秘的类名可能以某种方式是动态的。我建议使用更具描述性的类名。以下代码对我来说完全有效:
document.querySelector('textarea.OneBoxKeywordsInputPanel-input')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接