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 的其他部分:我可以通过执行以下操作来更改链接的文本Advanced Options and Filters___VINCE SAYS HELLO___请参阅捕获):

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

PS。我知道抓取 Google 关键字工具是违反 TOS 的,但我认为这个问题可能对任何试图抓取 JavaScript/Ajax-heavy 网站的人感兴趣。

4

3 回答 3

1

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

于 2012-08-21T23:09:07.843 回答
1
document.querySelector('textarea.sP3.sBFB').value = 'MY SUPER KEYWORDS';

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

于 2012-08-01T14:17:34.190 回答
0

我不确定这里到底发生了什么,但是您用于定位的类对我来说是不同的。OneBoxKeywordsInputPanel-input我假设您尝试定位的textarea 有第二个类, sPFB,并且没有其他类。这些神秘的类可能在某种程度上是动态的。我建议改用更具描述性的类名。以下对我来说很好:

document.querySelector('textarea.OneBoxKeywordsInputPanel-input')
于 2012-06-12T12:32:01.463 回答