gpt4 book ai didi

javascript - 有没有办法从 Node.js 中的特定位置向网站发送请求?

转载 作者:行者123 更新时间:2023-12-01 01:17:35 25 4
gpt4 key购买 nike

我是 node.js 和网络抓取的新手。我想从 amazon.com 提取数据。除了价格和库存信息之外,我还想拉到加拿大的 cargo 价格(顺便说一句,我的国家是土耳其,所以当我点击amazon.com时会自动显示到土耳其的 cargo 价格)。也许你们中有些人知道亚马逊网站的左上角有一个名为“Deliver to XXX country”的按钮,可以让客户了解到任何国家的 cargo 价格。但是存在一个问题,当我选择(单击按钮)一个我想要了解那里的 cargo 价格的国家时,指示所选国家/地区的网址没有变化。只是页面 html 内容发生了变化(到该国家的 cargo 价格出现或更改为其他价格水平)。那么,我如何操作我的请求模块,就好像我从加拿大进入网站 (amazon.com)(例如使用 VPN)一样?这在node.js“request-promise”模块中可能吗?或者我可以从更改的网站 html 内容中检测到它吗?我希望我能解释一下我想做什么。如果您访问此示例产品链接或任何其他产品,并在页面上浏览一番后,这将帮助您更清楚地了解情况。

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

最佳答案

您所看到的是一个使用 JavaScript 来更新页面信息而不是为其加载新网址的网站。

要获取您需要的信息,普通的 HTTP 请求是不够的:您需要使用我们所说的 headless browser 。基本上,您将编写代码来启动没有界面的网络浏览器,并在其中执行您想要的任何操作。

使用它,您将能够执行这种场景:

  1. Visit https://example.com
  2. Click on element that has class "class1"
  3. Wait for new page load
  4. Grab the content of element that has id "id2"

并有效地获取您需要的所有数据。这将比 HTTP 请求更加占用 CPU/内存,但在您描述的场景中您无法绕过它。

我最近最喜欢的是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']`);
})();

这是它工作的 gif:

Puppeteer on Amazon

关于javascript - 有没有办法从 Node.js 中的特定位置向网站发送请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54599906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com