2013-03-08 5 views
11

많은 시간 동안 열심히 검색 한 후에 여기에 올립니다. PhantomJS는 아래의 코드에서 "변수를 찾을 수 없습니다"라는 스크립트를 실행할 때 오류 메시지와 함께 변수를 사용할 수 없습니다.변수를 찾을 수 없습니다 - PhantomJS

어디에서 내 문제가 될 수 있는지 알고 있습니까?

page.open(myurl, function (status) { 

    if (status == 'success') { 

     page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js", function() { 

      elem = page.evaluate(function() { 

       /* Select one element with jQuery */ 
       myElem = $('body'); 
       return myElem; 

      }) 

      var elemHtml = page.evaluate(function() { return $(elem).html(); }); 
      console.log(elemHtml); 

     }) 

     phantom.exit();  

    } 

}) 

감사합니다 =)

+0

'myElem'은 어디에 정의되어 있습니까? –

+0

myElem이 정의 된 곳을 보여주기 위해 내 코드를 업데이트했습니다. – Antoine

답변

19

코드 평가 섹션에서 Quick Start 튜토리얼 정보의 중요한 부분은()가있다 : 맥락에서 자바 스크립트 또는 커피 스크립트 코드를 알아보고자

웹 페이지의 evaluate() 함수를 사용하십시오. 실행은 "샌드 박스 처리"되어 있으므로 코드가 자체 페이지 컨텍스트 외부의 JavaScript 객체 및 변수에 액세스 할 수있는 방법은 없습니다. 객체는 evaluate()에서 반환 될 수 있지만 간단한 객체로 제한되며 함수 나 클로저를 포함 할 수 없습니다.

코드의 문제는 이렇게 두 가지이다 :

  1. 변수 elem가 웹 페이지의 컨텍스트 외부 초기화, 그것은 두 번째 evaluate에서 접근이 아니다.
  2. 간단하지 않은 개체, 즉 DOM 요소를 반환합니다.

이것은 실제 "jailed"실행 모델에 맞게 코드를 적절하게 설계함으로써 해결하기 쉬운 문제입니다. 모든 관련 문서를주의 깊게 읽고 included examples 톤을 살펴보십시오.

+2

좋은 직장! 우습게 당신은 유일한 대답을 가지고 당신의 성은 "Guidance"를 의미하게됩니다. – pythonian29033

+1

나는 그것을 달성하는 방법을 여전히 확실하지 않습니다. 나는 page.evaluate() 변수를 액세스 할 수 있습니다. evaluate()에 전달 된 String을 기반으로 DOM 요소를 찾고 싶습니다. 보여 주시겠습니까/코드를 가르쳐 주시겠습니까? – rohit12sh

+1

"모든 관련 문서를주의 깊게 읽으십시오 (...)"- 응? 예. "나는 너에게 말하지 않을거야 ..." –

관련 문제