为什么我从PhantomJS文档的示例中得到错误?

时间:2017-06-18 07:18:48

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

我从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:语法错误,意外的输入结束$(“按钮”)。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:在'

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这个问题确实令人困惑......

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

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

为了帮助您入门,您将在下面找到一个工作示例(没有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