2013-03-08 26 views
11

Verimsiz saatlerce arama yaptıktan sonra buradan gönderiyorum. PhantomJS, "Değişken bulamıyorum" betiğimi çalıştırırken hata mesajıyla aşağıdaki kodda olduğu gibi bir değişkeni kullanmama izin vermiyor.Değişkeni bulamıyor - PhantomJS

Sorunumun nerede olabileceği hakkında bir fikrin var mı?

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();  

    } 

}) 

sayesinde =)

+0

'myElem' nerede tanımlanır? –

+0

myElem'in nerede olduğunu göstermek için kodumu güncelliyorum :) – Antoine

cevap

19

onun Kod Değerlendirilmesi bölümünde Quick Start eğitimde önemli bir bilgi parçası() vardır: bağlamda JavaScript veya CoffeeScript kodunu değerlendirmek

web sayfasının değerlendirilmesi() işlevini kullanın. Yürütme "korumalı", kodun kendi sayfa içeriği dışındaki herhangi bir JavaScript nesnesine ve değişkenine erişmesinin bir yolu yoktur. Bir nesne değerlendirmeden() döndürülebilir, ancak basit nesnelerle sınırlıdır ve işlevler veya kapaklar içeremez.

sizin koduyla sorun böylece iki kat:

  1. Değişken elem web sayfası bağlamı dışında başlatılır, ikinci evaluate erişilebilir değil.
  2. Basit olmayan bir nesneyi, yani bir DOM öğesini döndürürsünüz.

Bu, esas olarak "gerçek" hapsedilmiş "yürütme modeline uyması için doğru bir şekilde tasarlanarak çözülmesi kolay bir sorundur. Lütfen tüm ilgili belgeleri dikkatli bir şekilde okuyun ve included examples'un tonlarını keşfedin.

+2

güzel iş! tek cevabınız vardı ve soyadınız "Rehberlik" – pythonian29033

+1

anlamına geliyor. Bunu nasıl başaracağımı hala bilmiyorum. Page.evaluate() öğesindeki değişkene erişmek için bir durumum var. Değerlendirmeye iletilen String temelli DOM öğesini bulmak istiyorum(). Lütfen bana kodları göster/işaret eder misiniz? – rohit12sh

+1

"Lütfen tüm ilgili belgeleri dikkatle okuyun (...)" - ha? Örneğin. "Sana söylemeyeceğim ..." –