Там есть пример от тут, но он не работает пишет ошибку:
E:\project_web\porject2>phantomjs test5.js http://ariya.github.io/svg/tiger.svg tiger.png PhantomJS has crashed. Please read the crash reporting guide at <http://phantomjs.org/crash-reporting.html> and file a bug report at <https://github.com/ariya/phantomjs/issues/new>. Please attach the crash dump file: C:\TEMP\58579f65-f122-4a02-9952-41983592337a.dmp пример с тигром. Заработал с тигром, копирует, только другие копирует и добавляет лишний нивидимый размер [IMG SRC=http://f3.s.qip.ru/pQ6zADwr.png] |
когда ссылки у которых на конце png стоит то они не загружаются. Да смысл, если есть ссылка, то можно чем то другим сохранить изображение. В Phantomjs наверно любой код javaScript будет работать мб. какую то библиотеку подключить из node и сохранить.
Да что то я гуглю и ниче нету. Че JavaScript не может сохранить изображение из интернета? Я JavaScript плохо знаю, просто интересно :) . |
Ладно изображение мы не сохраним, это бесполезно, можно ссылку выводить на изображение в консоль, а из консоли считывать, фиг с ним с этим изображением.
Тут еще такие дела я сделал авторизацию на сайт fl.ru и второй раз на него захожу в phantomjs определяет что я не авторизован. Почему coocies не сохранились как в нормальном браузере???? Мне что каждый раз делать авторизацию? Ну это ужас, похоже phantomjs нужно только запускать как процесс, просто как самостоятельное приложение оно наврятли нормально работать будет. парсер так фиг нормальный напишешь или нет???? На чем вообще парсеры пишут??? Хотелось бы чтобы все было на JavaScript, а за кодировку еще забыл. Нужно ж еще и кодировку определять и если что перекодировать, в JavaScript такое есть или нет? Вообще что то javaScript убоговатый чуток :) |
Не лучше всетаки сохранить и изображение и все сделать через JS. Парсера быстро пишутся на нем, неохота смешивать, хочется все на js сделать :)
|
А почему у меня не выводятся остальные элементы после первого которые я получаю с помощью getElementsByTagName ???
var links=page.evaluate(function() { return document.getElementsByTagName('img'); }); console.log("links.length="+links.length); console.log(links[0].src);//выводится нормально console.log(links[1].src);//этот уже не выводится for(var i=0;i<links.length;i++) { console.log(i); console.log(links[1].src);//не выводится } 1 элемент выводится и зависает на console.log(links[1].src); в чем проблема???? Выводит что 10 элементов в массиве, а получаю только один, остальные виснут. Как получить все src???? Разобрался, вывел просто console.log(links[i]); и оказалось что в 0 есть [object] а в остальных null, и что делать, почему функция вернула null и 9 элементов? Как получить все изображения на странице??? querySelectorAll тоже также в первом элементе есть объект, а в 9 нету От такой код работает, когда его в конец страницы добавляю <script> var mass= document.querySelectorAll('img'); alert(mass.length); for(var i=0;i<mass.length;i++) { alert(mass[i].src); } </script> и вообще length тут 12, а у меня 10, че то evaluate не правильно как то работает. через JQuery получилось получить 10 изображений, через функции jS ниче не работает :( Короче ясно, нужно и массив в функции evaluate обходить, тогда все нормально. Наверно JavaScript функции и работать не будут вне evaluate. Какаето фигня. |
У меня так же самая проблема. Если парсю маленькие тестовые странички - всё нормально, как только большие страницы, сразу какая-то фигня, штуки 2 обработает и останавливается.
Запускаю через консоль, кто знает что и от чего это когда в консоли не решётка появляется типа user@server# а курсор мигает вот так ![]() Видите на скрине после for is end он ждёт чего-то, что бы дать команду приходится Ctrl+C нажимать и тогда уже консоль опять реагирует. Ещё не очень понятно phantom.exit где ставить правильно. Вот скрипт. var urls = [ "https://site.ru/page=1", "https://site.ru/page=2", "https://site.ru/page=3", "https://site.ru/page=4" ]; var numurls = urls.length; for (u = 0; u < numurls; u++) { var fs = require('fs'); var webPage = require('webpage'); var page = webPage.create(); console.log('link '+ urls[u]); page.open(urls[u], function(status) { console.log('Status: ' + status); if (status === 'success') { //моя обработка и запись console.log('for is end'); //phantom.exit(); } }); } // конец цикла 1 url |
Ах да ninja2, забейте на картинки, спарсите их потом на php, у меня уже есть готовый парсер, работает отлично, скорость парсинга офигенная 45 картинок за 0,3 секунды.
Phantom применять что бы картинки парсить это как-то странно короче, он для более сложных задач обычно применяется. |
Цитата:
Та уже разобрался как картинки парсить, от тут в самом низу несколько примеров, есть пример авторизации на fl.ru у тебя код может зависать потому что функции phantom.exit(); нету или бывает у меня зависало когда ошибка была в коде где то ошибка. А как через php парсить, это типо сохранить в файл ссылки и потом скопировать или как то можно из php процессы создавать? От интересно можно через php запустить консольное приложение с параметрами??? Осталось еще прокси разобрать, я что то пробовал с прокси запускать так он пол часа ждет пока прокси отработает. Это не дело. Нужно как то время засекать сколько оно будет запускаться, долго через прокси грузилось. |
Сам пока не успел опробовать но из php как-то так:
shell_exec('/usr/local/bin/phantomjs -v'); С параметром $title = shell_exec('/usr/local/bin/phantomjs /script.js http://market.yandex.ru/model.xml?modelid=8230052&hid=90594'); А вы подскажите мне как поймать этот передаваемый параметр в ЯваСкрипте? |
Цитата:
var system=require('system'); var url=system.args[1]; console.log(url); phantom.exit(); вроде так. |
Часовой пояс GMT +3, время: 13:38. |