Есть ли способ отправить запрос на сайт из определенного места в Node.js? - PullRequest
0 голосов
/ 08 февраля 2019

Я новичок в node.js и поиске в сети.Я хочу получить данные с amazon.com.В дополнение к информации о цене и запасах, я также хочу вывести цену на груз в Канаду (кстати, моя страна - Турция, поэтому, когда я нажимаю amazon.com, автоматически показывает цену на груз в Турцию).Возможно, некоторые из вас знают, что amazon.com представляет кнопку в левой верхней части под названием «Доставить в XXX страну», которая позволяет клиенту узнать цену груза в любую страну.Но есть проблема в том, что когда я выбираю (нажимаю на кнопку) страну, в которой я хочу узнать цену на груз, там нет изменений в URL, который указывает выбранную страну.Есть только изменение в содержании HTML страницы (цена груза в эту страну появляется или изменяется на другой уровень цен).Итак, как я могу манипулировать своим модулем запросов, как будто я вхожу на веб-сайт (amazon.com) из Канады (как при использовании VPN)?Возможно ли это в модуле запроса-обещания node.js?Или я могу определить это по измененному html-сайту?Я надеюсь, что смогу объяснить, что я хотел сделать.Если вы перейдете по ссылке этого примера продукта или любого другого продукта и после некоторого перехода на страницу, это поможет вам лучше понять ситуацию.

https://www.amazon.com/gp/product/B072HW9W92

1 Ответ

0 голосов
/ 08 февраля 2019

То, что вы видите, - это веб-сайт, использующий Javascript для обновления информации на странице вместо загрузки нового URL-адреса для нее.

Чтобы получить необходимую информацию, обычных HTTP-запросов будет недостаточно: вынужно будет использовать то, что мы называем безголовый браузер .По сути, вы напишите код, который запускает веб-браузер без интерфейса и делает все, что вы хотите в нем.

Используя это, вы сможете выполнить такой сценарий:

  1. Посетите https://example.com
  2. Нажмите на элемент, имеющий класс "class1"
  3. Ожидание загрузки новой страницы
  4. Захватите содержимое элемента с идентификатором "id2"

И эффективно получите все необходимые данные.Это будет намного больше ресурсов процессора / памяти, чем HTTP-запросы, но вы не сможете обойти это в описанном вами сценарии.

В последнее время моим любимым является puppeteer .

Вот рабочий фрагмент, использующий Puppeteer, делающий именно то, что вы пытались сделать.Я пропустил опцию headless: false, чтобы вы могли видеть, что происходит.

const puppeteer = require("puppeteer");

(async() => {
    const browser = await puppeteer.launch({headless: false, args: ['--no-sandbox']});
    const page = await browser.newPage();
    await page.goto("https://www.amazon.com/dp/B072HW9W92/");

    await page.click(".nav-a.nav-a-2.a-popover-trigger");
    await page.waitFor(500);

    await page.click(".a-button-text.a-declarative[role='radiogroup']");
    await page.waitFor(500);

    await page.click(`[data-value='{"stringVal":"CA"}']`);
    await page.waitFor(500);

    await page.click(`[name='glowDoneButton']`);
})();

А вот и гиф этого дела:

Puppeteer on Amazon

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