【问题标题】:Scraping Google Keyword Tools with CasperJS and PhantomJS使用 CasperJS 和 PhantomJS 抓取 Google 关键字工具
【发布时间】:2012-03-12 14:41:57
【问题描述】:

我目前正在尝试使用 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() 以查看该字段包含的内容。 As you can see,它确认我在正确的页面上并且我已登录,但 &lt;textarea&gt; 是空的。

奇怪的是,我可以访问 DOM 的其他部分:我可以通过执行以下操作将显示 Advanced Options and Filters 的链接的文本更改为 ___VINCE SAYS HELLO___(请参阅捕获):

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

附言。我知道抓取 Google 关键字工具是违反 TOS 的,但我认为这个问题可能会引起任何试图抓取 JavaScript/Ajax 重网站的人的兴趣。

【问题讨论】:

  • 您可能必须等待这个文本区域被加载并可用。查看documentation for waitForSelector()
  • 感谢 NiKo 的及时回复。我已经尝试过你的建议。实际上,您在此处看到的代码包含在 WaitFor() 语句中。由于__utils__.exists(),我尝试了一个WaitForSelector('textarea.sP3.sBFB') 和一个WaitFor(),它具有测试该字段是否存在的功能,但都没有奏效。

标签: javascript screen-scraping web-scraping phantomjs


【解决方案1】:
document.querySelector('textarea.sP3.sBFB').value = 'MY SUPER KEYWORDS';

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 什么 CSV 文件?这只是白日梦。这样的事情就像独角兽!不存在。
    • 请去调查 adwords 关键字面板有一个隐藏的 - 不再是隐藏的 - 部分,您可以在其中检索所有触发您的广告的关键字组合。对我来说,这是一座金矿。
    • @ErdinçÇorbacı 你是什么意思?谢谢
    【解决方案3】:

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

    document.querySelector('textarea.OneBoxKeywordsInputPanel-input')
    

    【讨论】:

      猜你喜欢
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多