Исполнение JS для парсера на PHP

Тема в разделе "PHP", создана пользователем Inviseble_Demon, 26 апр 2013.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    350
    Всем доброго времени суток.

    Итак имеем задачу:
    Получить HTML после обработки JavaScript`ом при этом имеем сервер *nux и возможность ставить софт туда.

    Решаем задачу.
    http://phantomjs.org/
    Этого достаточно как считает почти весь интернет (( Но так как тема создавалось с надеждой получить примерно то что представляет в итоге этот пост то распишем это поподробнее.

    PhantomJS это все плюшки WebKit из консоли с управлением на JS и поддержкой различных стандартов и технологий: DOM, CSS, JSON, Canvas и SVG.



    Устанавливаем
    apt-get instrall phantomjs

    Создаем маленький скрипт который будет принимать параметр адреса и выдавать нам итог.
    Так же лично мне понадобилось знать на какой я странице ибо слать нужно итог туда (редирект был после перехода по начальной ссылке).

    Код:
    var page = require('webpage').create();
    page.open(phantom.args[0], function (status) {
        var ua = page.evaluate(function () {
            return location.href+'##############'+document.getElementsByTagName('html')[0].innerHTML
        });
        console.log(ua);
        phantom.exit();
    });
    
    Сохроняем его под именем get_end_html.js (к примеру)

    Далее создаем "запрос" исходника
    Код:
    phantomjs  --cookies-file=cookie.txt get_end_html.js http://google.com/
    Тобиш передаем путь до файла cookie далее скрипт для нашего софта и адрес с которым все это работает.

    В итоге мы получаем исходник после работы JS

    Так как тема по PHP идем немного далее.

    Функция для exec (обрезок из проекта...)
    PHP:
    function SetTask($cmd)
    {
            
    exec($cmd$output$if);
            return array(
                
    'output' => implode('<br>'$output),
                
    'if' => $if
            
    );
    }


    Запрос страницы через phantomjs (вырезка с проекта)

    PHP:
                    $phantomjs SetTask('
                        phantomjs  --cookies-file=' 
    FCLASS DS 'curl' DS 'cookie' DS 'download_wb.txt ' .
                            
    FCLASS DS 'get_end_html.js ' .
                            
    $this->url
                    
    );
     
     
    //  $this->CurlInfo['url']  - это костылек ))                
    list($this->CurlInfo['url'], $page) = explode('##############'$phantomjs['output']);

    Все после запроса мы имеем в $page конечный вариант страницы - парсем радуемся ))

    Единственная ссылка которую помню и которая мне помогла.
    http://habrahabr.ru/post/116789/


    Всем спасибо за внимание проявленное к данному вопросу, вопрос решен - тему можно закрывать.
    Надеюсь я пояснил хоть как то понятно и вам не потребуется как мне около 10 часов на решение данной проблемы :D Правда я куда попало лез и тратил на это время...

    PS. Софт довольно мощный без проблем можно сделать из него аналог XHE непонятно только нахер они сразу на нем не делали... Работало бы везде ))
     
    latteo нравится это.
  2. StrikeOFF

    StrikeOFF ♥kan inte lyfta utan lift♥

    Регистр.:
    20 мар 2010
    Сообщения:
    362
    Симпатии:
    200
    Насчет насилия над html я не понял, но похоже что тебе нужна эмуляция браузера. Я юзаю Xweb потому что у меня задачи тривиальные. Если бы была задача тру сложная то учился бы работать с selenium и phantomjs
     
    Inviseble_Demon нравится это.
Статус темы:
Закрыта.