@s-dimyan

PhantomJS: как сохранить циклом html код нескольких страниц?

Имеется JS код для сохранения html кода некоторой страницы в файл text.html

var url_name= "https://www.myscore.ru/match/bNYBihO3/#odds-comparison;over-under;full-time";

var page = require('webpage').create();

var fs = require('fs');
var path = 'text.html'

page.open(url_name, function (status) {
  var content = page.content;
  fs.write(path, content, 'w')
  phantom.exit();
});


все работает отлично, только когда я создаю массив URL и прохожу по нему циклом for у меня получается не то что нужно

var mass = ["https://www.myscore.ru/match/bNYBihO3/#odds-comparison;over-under;full-time", "https://www.myscore.ru/match/nRJYS03A/#odds-comparison;over-under;full-time"];
var page, fs;
for(var i=1; i<mass.length; i++){
	
	page = require('webpage').create();

	fs = require('fs');
	
	page.open(mass[0]);
	
	fs.write('text'+i+'.html', page.content, 'w');
	 
}

phantom.exit();


Как я понял цикл for не ждет пока первая страница загрузится и загружает вторую. В итоге создается только второй файл со следующим содержимым

<html><head></head><body></body></html>

Помогите решить данную проблему.

Заранее спасибо за помощь.
  • Вопрос задан
  • 1023 просмотра
Решения вопроса 1
@s-dimyan Автор вопроса
нет, так тоже не работает. создаются 2 файла html, только там не страница а теги
<html><head></head><body></body></html>

Проблема решена!!!
Для этого я создал на localhost папку parser с файлами started.php и pars_page.js. PHP запускает PhantomJS и скрипт
файл started.php:
// массив ссылок
	$mass_url = [
		"https://www.myscore.ru/match/bNYBihO3/#odds-comparison;over-under;full-time", 
		"https://www.myscore.ru/match/nRJYS03A/#odds-comparison;over-under;full-time"
	];
	// перебор по ссылкам
	for($i=0; $i<count($mass_url); $i++){
		// запускаем phantomjs
		// запускаем скрипт JS
		// первый аргумент - URL страницы
		// второй аргумент - имя файла для сохранения ее содержимого
		exec("start C:\phantomjs\bin\phantomjs pars_page.js ".$mass_url[$i]." text".$i.".html");
	}


файл pars_page.js:
var page = require('webpage').create(); // создаем окно браузера куда будем загружать страницы
var system = require('system'); // Инициализируем модуль system
var address = system.args[1]; // адрес страницы (первый после наименования скрипта аргумент system)
var path = system.args[2]; // наименование создаваемого файла с содержимым страницы (второй аргумент system)
var fs = require('fs'); // Инициализируем модуль fs для записи в файл

page.open(address, function (status) { // открываем страницу в окне браузера
  fs.write(path, page.content, 'w'); // записываем содержимое страницы в файл
  phantom.exit(); // закрываем phantomjs
});


У меня всё отлично работает!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@ZaurK
Может так заработает?
for(var i=0; i<mass.length; i++){
	page = require('webpage').create();
	fs = require('fs');
	page.open(mass[i]);
	fs.write('text'+i+'.html', page.content, 'w');
}
Ответ написан
Комментировать
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
var mass = ["https://www.myscore.ru/match/bNYBihO3/#odds-comparison;over-under;full-time", "https://www.myscore.ru/match/nRJYS03A/#odds-comparison;over-under;full-time"];
var page, fs;
for(var i=1; i<mass.length; i++){
    page = require('webpage').create();
    fs = require('fs');
    page.open(mass[0]);
    page.onLoadFinished = function() {
        fs.write('text'+i+'.html', page.content, 'w');
    };

    
}

phantom.exit();

все в документации описано же.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы