【问题标题】:Why do I get an error with an example from PhantomJS documentation?为什么我在 PhantomJS 文档中的示例中出现错误?
【发布时间】:2017-11-20 14:39:35
【问题描述】:

我从http://phantomjs.org/page-automation.html中举了一个例子,因为我需要在抓取之前在JS网站上按下一个按钮。

var page = require('webpage').create();
page.open('http://www.sample.com', function() {
  page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
    page.evaluate(function() {
      $("button").click();
    });
    phantom.exit()
  });
});

但是当我运行这段代码时,我得到了这个错误:

work7.rb:5: `$(' 不允许作为全局变量名
work7.rb:5:语法错误,意外的输入结束 $("button").click();

PhantomJS 需要正确吗?

var page = require('webpage').create();
  page.open('http://example.com', function(status) {
});

没用!

/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require': 无法加载此类文件 -- 网页 (LoadError)

来自 /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in 需要'
来自 work7.rb:3:in '

我做错了什么?

【问题讨论】:

  • 你似乎用 Ruby 解释 Javascript!
  • 所有我需要的打开页面。稍等一下,因为 JS 需要一些时间来渲染数据。然后单击一个按钮并抓取页面。就这样。请帮帮我。
  • 我只是从 PhantomJS 的文档中复制片段,但它不起作用!我的系统有问题吗?我忘了要求什么?
  • 您上面的代码是 JavaScript。您需要使用像 node.js 这样的 JavaScript 运行时来执行它。但是你不能使用 Ruby 来做到这一点。
  • 我明白了。关于 PhantomJS 的主要网站不适用于 Ruby。对于 Ruby,我们应该使用 github.com/teampoltergeist/poltergeist/tree/v1.15.0readysteadycode.com/…

标签: javascript ruby web-scraping phantomjs browser-automation


【解决方案1】:

这个问题真的很让人困惑……

您的代码是用 JavaScript 编写的,而不是 Ruby!要执行 JavaScript 代码,您需要一个 JavaScript 运行时环境。现在最流行的是(图形和无头)网络浏览器、Node.js 和 Electron。

PhantomJS 一个网络浏览器。它没有图形界面,但这是一个真正的、成熟的 Web 浏览器,您可以使用脚本实现自动化。要运行用 JavaScript 编写的常规 PhantomJS 脚本,您必须使用 phantomjs 命令,如果您使用 npm 在系统上全局安装了 phantomjs-prebuilt,则该命令应该在您的 PATH 中可用。

为了帮助您入门,您将在下面找到一个工作示例(没有 jQuery),其中 PhantomJS 单击网页的一个按钮,该按钮触发一个包含以下消息的 JS 警报:“它有效!”。此消息由onAlert 事件处理程序捕获并打印到控制台。

HTML (index.html)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>PhantomJS</title>
</head>
<body>
  <button>OK</button>
  <script>
    (function () {
      var button = document.querySelector('button');

      button.addEventListener('click', function () {
        alert('It works!');
      }, false);
    })();
  </script>
</body>
</html>

JavaScript (script.js)

var page = require('webpage').create();

page.onAlert = function (msg) {
  console.log(msg);
};

page.open('index.html', function () {
  page.evaluate(function () {
    document.querySelector('button').click();
  });

  phantom.exit()
});

命令

phantomjs script.js

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2021-02-11
    • 1970-01-01
    • 2017-07-09
    • 2019-04-05
    相关资源
    最近更新 更多