Извлечение значений переменных JavaScript с помощью веб-очистки - PullRequest
4 голосов
/ 10 мая 2011

Для проекта компании мне нужно создать веб-приложение для очистки с помощью PHP и JavaScript (включая jQuery), которое будет извлекать конкретные данные с каждой страницы сайтов наших клиентов.Приложение очистки должно получать данные двух типов для каждой страницы: 1) определить, присутствуют ли определенные элементы HTML с определенными идентификаторами, и 2) извлечь значение определенной переменной JavaScript.Имя переменной JS одинаково на каждой странице, но значение обычно различается.

Мне кажется, я знаю, как получить первое требование к данным: с помощью функции PHP file_get_contents () получить HTML-код каждой страницы изатем используйте JavaScript / jQuery для анализа этого HTML и поиска элементов с определенными идентификаторами.Однако я не уверен, как получить 2-й фрагмент данных - значения переменных JavaScript.Переменная JavaScript даже не найдена в HTML каждой страницы;вместо этого он находится во внешнем файле JavaScript, который связан со страницей.И даже если бы JavaScript был встроен в HTML-код страницы, я знаю, что file_get_contents () извлечет только код JavaScript (и другой HTML-код), а не любые значения переменных.

Может кто-нибудь предложить хороший подход к получениюзначение переменной для каждой страницы данного веб-сайта?

РЕДАКТИРОВАТЬ: просто чтобы уточнить, мне нужны значения переменных JavaScript после запуска кода JavaScript.Это вообще возможно?

Ответы [ 4 ]

4 голосов
/ 11 мая 2011

Вы говорите, что вам нужно значение переменной после выполнения JS. Я предполагаю, что это всегда один и тот же JS, с изменением только начальных значений переменных. Лучше всего перенести JS на PHP, что позволит вам извлечь начальные значения переменных JS и затем представить, что вы выполнили JS.

Вот функция для извлечения значений переменных из JavaScript:


/**
 * extracts a variable value given its name and type. makes certain assumptions about the source,
 * i.e. can't handle strings with escaped quotes.
 * 
 * @param string $jsText    the JavaScript source
 * @param string $name      the name of the variable
 * @param string $type      the variable type, either 'string' (default), 'float' or 'int'
 * @return string|int|float           the extracted variable value
 */
function extractVar($jsText, $name, $type = 'string') {
    if ($type == 'string') {
        $valueMatch = "(\"|')(.*?)(\"|')";
    } else {
        $valueMatch = "([0-9.]+?)";
    }

    preg_match("/$name\s*\=\s*$valueMatch/", $jsText, $matches);
    if ($type == 'string') {
        return $matches[2];
    } else if ($type == 'float') {
        return (float)$matches[1];
    } else if ($type == 'int') {
        return (int)$matches[1];
    } else {
        return false;
    }
}
2 голосов
/ 11 мая 2011

предположительно, это невозможно, потому что это кажется таким простым, но если это ваш .js, который вы пытаетесь обнаружить, то почему бы просто не сделать так, чтобы .js сделал что-то обнаруживаемое путем очистки страницы?

используйте js, чтобы где-то заполнить тег (например, через element.innerHTML):

<span><!--Important js thing has been activated!--></span>.   

edit: альтернативно, возможно, используйте document.write, если скрипт должен быть обнаружен при загрузке

0 голосов
/ 11 мая 2011

Вы можете использовать Zombie.js библиотеку Node (js): http://zombie.labnotes.org/

Он может щелкать ссылки, обходить дерево доменов и должен иметь возможность анализировать JS, поскольку все это выполняется с помощью JavaScript.

0 голосов
/ 10 мая 2011

Не можете ли вы использовать js-скрипт, который будет отправлен вашим клиентам, и этот скрипт отправит информацию на ваш сервер?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...