Перейти к основному содержимому

12.05 Использование узла Headless browser

В качестве примера создадим сценарий в котором:

  • В котором генерируются названия валют, курс по которым необходимо получить;
  • Результатом выполнения является курс заданных валют к, например, фунту стерлингов.

В качестве источника данных по курсам валют будем использовать сайт BoE. На веб странице представлена таблица с курсами различных валют к фунту стерлингу.

Для успешной работы сценария необходимо создать 4 узла:

  • (1) Узел Trigger on Run once для запуска сценария по нажатию на кнопку Запустить один раз;
  • (2) Узел JavaScript с кодом для генерации названий валют в формате JSON;
export default async function run({execution_id, input, data, store}) {
return {
C1: "US",
C2: "Euro"
};
}
  • (3) Узел Headless browser для обработки веб страницы и получения нужных параметров с кодом ниже. В качестве const currencyCode1 и const currencyCode1 необходимо выбрать параметры предыдущего узла JavaScript:
async function run({execution_id, input, data, page}) {
// Получаем коды валют из данных, переданных узлом 3
const currencyCode1 = data["{{$2.C1}}"]; // Переменная для кода первой валюты
const currencyCode2 = data["{{$2.C2}}"]; // Переменная для кода второй валюты

// Устанавливаем User-Agent для имитации запросов от браузера
await page.setUserAgent('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36');

// Переходим на страницу с курсами валют Банка Англии
await page.goto('https://www.bankofengland.co.uk/boeapps/database/Rates.asp?Travel=NIxIRx&into=GBP');

// Ожидаем загрузки таблицы с курсами валют
await page.waitForXPath('//*[@id="editorial"]/table');

// Ищем элемент с курсом валюты, соответствующей первому коду, и получаем его значение
const currency1Element = await page.waitForXPath(\`//td[a[contains(@title, "${currencyCode1}")]]/following-sibling::td[1]\`, {timeout: 30000});
var currency1 = await currency1Element.evaluate(el => el.textContent.trim());

// Ищем элемент с курсом валюты, соответствующей второму коду, и получаем его значение
const currency2Element = await page.waitForXPath(\`//td[a[contains(@title, "${currencyCode2}")]]/following-sibling::td[1]\`, {timeout: 30000});
var currency2 = await currency2Element.evaluate(el => el.textContent.trim());

// Строим JSON объект с искомой структурой
const result = {
C1: \`${currencyCode1} - ${currency1}\`,
C2: \`${currencyCode2} - ${currency2}\`,
};

// Возвращаем этот объект
return result;

  • (4) Узел Webhook response для формирования ответа на выполнение сценария.

Результатом выполнения сценария является строка с параметрами курса фунта стерлингов согласно таблице BoE.