javascript
  • phantomjs
  • 2015-06-28 2 views 0 likes 
    0

    Я пытаюсь получить «значение» атрибута из формы с помощью PhantomJS:Как получить атрибуты с помощью PhantomJS?

    <input type="text" name="uniq_num" value="2PskzYavnHJa"> 
    

    Это мой сценарий:

    var page = require('webpage').create(); 
    var url = 'http://example.com/'; 
    
    page.open(url, function (status) { 
        if (status === 'success') { 
         page.injectJs('https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'); 
         var input = $(document).ready(function(){ 
         return $('input[name="uniq_num"]').attr('value'); 
        }); 
    
        console.log(input); 
        phantom.exit(); 
    } 
    

    Но это не работает.

    ответ

    1

    PhantomJS имеет песочницу контекст DOM (контекст страницы), и вы можете получить доступ к нему только через page.evaluate():

    page.open(url, function (status) { 
        if (status === 'success') { 
         page.includeJs('https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js', function(){ 
          var input = page.evaluate(function(){ 
           return $('input[name="uniq_num"]').attr('value'); 
          }); 
          console.log(input); 
          phantom.exit(); 
         }); 
        } 
    } 
    

    Не путайте page.injectJs() с page.includeJs(). Один из них принимает URL-адрес и обратный вызов, потому что он асинхронный, а другой - локальное имя файла. Кроме того, вам не нужно JQuery для этого:

    page.open(url, function (status) { 
        if (status === 'success') { 
         var input = page.evaluate(function(){ 
          return document.querySelector('input[name="uniq_num"]').value; 
         }); 
         console.log(input); 
         phantom.exit(); 
        } 
    } 
    

    Обратите внимание:

    Примечание: Аргументы и возвращаемое значение функции evaluate должна быть простой примитивный объект. Эмпирическое правило: если оно может быть сериализовано через JSON, тогда это нормально.

    Закрытие, функции, узлы DOM и т. Д. Будет не работа!

     Смежные вопросы

    • Нет связанных вопросов^_^