Каталог решений - Парсинг html страниц с выводом информации через JavaScript с использованием Selenium

Парсинг html страниц с выводом информации через JavaScript с использованием Selenium

Парсинг html страниц с выводом информации через JavaScript с использованием Selenium

В наличии

Есть девочки как девочки, есть мальчики как мальчики, есть сайтики как сайтики, но странички их обманщики.

В целях сохранить информацию, от автоматизированного сбора, многие ресурсы пытаются защитить ее. Один из таких способов — вывод информации на странице через JavaScript. При получении такой страницы в 1С, JavaScript не успевает вывести необходимые данные, и в 1с получаем практически пустую страницу.

В статье приведу пример разработки, для парсинга таких страниц, без регистрации и смс.

Категория:

Описание

Подготовка

Для реализации данного парсинга нам необходимо:

0. google chrome. Да, нам нужен браузер, открываться он не будет) Все будет происходить в командной строке, но однако сам браузер нам необходим) Я пользовался хромом, и драйверы качал для него. 

1.  (шутеечка =) ). Проверял на 8.2.19.102, 8.3.15.1656

2. ChromeDriver (искать тут)

3. Python (искать тут

3.1 pyinstaller

3.2 Selenium

4. Скрипт для связки 1с и ChromeDriver . Напишем сами на Python, и скомпилируем в exe(parser.exe).

 

Суть работы такая — запускаем из 1с parser.exe, в параметрах передаем ссылку на страницу  для парсинга, и путь к файлу, в который сохраним нашу страницу, для парсинга из 1с, и еще кое какие данные. Т.е. фактически мы скачаем эту страницу с уже выведенными данными и будем в 1с работать с ее локальной версией.

Рис.1 — Общие шаги

Теперь подробнее

1. Работа парсера была протестированна на 1с 8.2 и 8.3.

Я передаю одну ссылку, и жду в ответ только одну страницу. Это не очень хорошо, так как лучше передавать весь массив ссылок, и обрабатывать их в скрипте, чтобы не вызывать скрипт на каждую страницу. Рассмотрим именно такой вариант. Но и в в таком режиме можно распараллелить работу — пока скрипт скачивает страницу, 1с обрабатывает предыдущий результат. 

 

&НаКлиенте
Перем КаталогРезультата,
НачалоПарсинга,
ИмяФайлаРезультата;

&НаКлиенте
Процедура Парсинг(Команда)
	
	ПередПарсинг();
	
КонецПроцедуры

&НаКлиенте
Процедура ПередПарсинг() 
		
	url = "https://www.mvideo.ru/televizory-i-cifrovoe-tv-1/televizory-65";
	
	НачатьПарсинг(url);
	
	
КонецПроцедуры

&НаКлиенте
Процедура НачатьПарсинг(url)
	
	СкриптПарсинга = "B:\job\parser_site\py\parser.exe"; // Путь до parser.exe
	WebDriver = "C:\chromedriver.exe"; 					// Путь до веб драйвера
	
	КаталогРезультата = КаталогВременныхФайлов();
	ИмяФайлаРезультата = Строка(Новый УникальныйИдентификатор) + "_parserres.html";
	ФайлРезультата = КаталогРезультата + ИмяФайлаРезультата; 
	
	Команда = СкриптПарсинга + " --arurl " + url + " --path " + ФайлРезультата + " --driver ";

	НачалоПарсинга = ТекущаяДата();
	
	КомандаСистемы("""" + Команда + """");
	
	ПодключитьОбработчикОжидания("ПослеПарсингаСтраницы", 1, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеПарсингаСтраницы()
	
	МассивФайлов = НайтиФайлы(КаталогРезультата, ИмяФайлаРезультата, Ложь);
	
	Если ТекущаяДата() - НачалоПарсинга > 120 Тогда
		Возврат;
	КонецЕсли;
	
	Если МассивФайлов.Количество() = 0 Тогда
		ПодключитьОбработчикОжидания("ПослеПарсингаСтраницы", 2, Истина);
		Возврат;
	КонецЕсли;
	
	Для Каждого Элемент Из МассивФайлов Цикл
		
		ЧтениеHTML = Новый ЧтениеHTML;
		ЧтениеHTML.ОткрытьФайл(Элемент.ПолноеИмя);
		
		ПостроительDOM = Новый ПостроительDOM;
		ДокументDOM = ПостроительDOM.Прочитать(ЧтениеHTML);
				
	КонецЦикла;	
	
КонецПроцедуры


 

2. WebDriver — это инструмент с открытым исходным кодом для автоматического тестирования веб-приложений во многих браузерах. Он предоставляет возможности для навигации по веб-страницам, ввода данных пользователем, выполнения JavaScript и многого другого. ChromeDriver — это автономный сервер, который реализует  стандарт W3C WebDriver . ChromeDriver доступен для Chrome на Android и Chrome на рабочем столе (Mac, Linux, Windows и ChromeOS). 

Источник

Путь к драйверу передаем в парсер параметром WebDriver.

 

3. Phyton можно скачать с официального сайта, либо установить через пакетный менеджер. Думаю с этим вопросом не возникнет.

3.1 pyinstaller — утилита для компиляции .py в .exe. Установка:

pip install pyinstaller

Если команда pip не найдена, нужно добавить корневую директорию Phyton и деректорию ./Scripts в переменные окружения Path

Рис.2 — Переменные окружения для Python

3.2 Selenium — собственно он будет делать всю грязную работу с js. Установка:

pip install selenium

 

4. Parser.exe

Вот мой примера кода парсинга:

import time
import argparse
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.add_argument("disable-gpu")

parser = argparse.ArgumentParser()
parser.add_argument('--arurl'   , type=str)
parser.add_argument('--path'    , type=str)
parser.add_argument('--driver'  , type=str)
args = parser.parse_args()

url = args.arurl
path = args.path
PathWebDriver = args.driver

driver = webdriver.Chrome(PathWebDriver, options=options)
driver.get(url)
time.sleep(5)
html_source = driver.page_source

res = open(path, 'w', encoding='utf-8')
res.write(html_source)
res.close()

driver.quit()

Сохраним его с именем parser.py. Чтобы компилировать его в exe необходимо применить для него команду:

pyinstaller parser.py

В папке со скриптом появится distr. И там появится Parser.exe.

 

Собственно его мы и будем запускать из 1С. На этом вроде и все. Надеюсь, ничего не упустил.

has been added to your cart:
Оформление заказа