PhantomJS将变量传递给page.open

时间:2014-07-19 15:53:59

标签: variables url phantomjs argument-passing

我需要在一个页面上捕获一个URL,然后打开目标。什么是最优雅的解决方案?下面的代码不起作用,因为变量 url 基本上是本地的。

function() {
  page.open("https://www.google.com/blah");
},
function() {
  page.evaluate(function() {
    var url=document.getElementById('link42')[0]; //URL captured
  });
},
//opening the target 
function() {
  page.open(url);
},
function() {
  page.evaluate(function() {
    console.log(document.querySelectorAll('html')[0].outerHTML);
  });
} 

1 个答案:

答案 0 :(得分:1)

您可以将其设为全球。您只需要记住如何从页面上下文中获取URL。无法返回DOM元素,但您可以返回JSON可序列化的所有内容。

引自page.evaluate

  

注意: evaluate函数的参数和返回值必须是一个简单的原始对象。经验法则:如果它可以通过JSON序列化,那就没关系了。

var url;

// function chainer
function() {
  page.open("https://www.google.com/blah");
},
function() {
  url = page.evaluate(function() {
    return document.getElementById('link42').href; // href captured
  });
},
//opening the target 
function() {
  page.open(url);
}

getElementById只返回一个元素,因此您无法使用[0]