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

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

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

    Inviseble_Demon

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

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

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

    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 конечный вариант страницы - парсем радуемся ))

    Единственная ссылка которую помню и которая мне помогла.
    Перейти по ссылке


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

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

    StrikeOFF ♥kan inte lyfta utan lift♥

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