在Linux服务器上运行时,无法加载人偶页面javascript

时间:2019-10-02 11:51:20

标签: node.js puppeteer

我正在用javascript编写脚本,以从特定网站抓取产品信息。首先,我从网站上获取所有产品链接,然后根据其链接抓取有关产品的信息。 从网站抓取产品链接时遇到问题。通常,当您打开站点时,请一直向下滚动,直到所有产品都加载到页面上为止。为此,我正在使用以下代码:

    await page.evaluate(async () => {
      await new Promise((resolve, reject) => {
        let totalHeight = 0;
        const distance = 100;
        const timer = setInterval(() => {
          const scrollHeight = document.body.scrollHeight;
          window.scrollBy(0, distance);
          totalHeight += distance;
          if (totalHeight >= scrollHeight) {
            clearInterval(timer);
            resolve();
          }
        }, 300);
      });
    });

现在,这在具有Windows 10的本地计算机上就像一个超级按钮一样工作。我需要在数字海洋飞沫上的Linux服务器上运行它。当我将代码上传到Linux服务器时,脚本向下滚动页面时,似乎无法加载产品。我们仅获得首页上的产品。我也在Google云计算引擎上尝试过。但没有运气..

任何人都遇到过类似的问题...如果是,请您能帮我吗。

1 个答案:

答案 0 :(得分:0)

*免责声明:我的服务器是Ubuntu,所以希望能对您有所帮助,但可能会略有不同。

  1. 请确保puppeteer的特定依赖项均已安装在linux服务器上。他们不会总是与npm i一起安装。用于检查未安装依赖项的命令: ldd chrome | grep not 并且您可能会发现这对于一次安装它们很有用:
sudo apt-get install gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget 

同样,由于您运行的是不同的系统,因此您可能会稍有不同,但是请务必确保使用与系统等效的过程来安装依赖项。

  1. 如果这一切都很好,那么您将需要检查代码部分,如下所示: await page.goto('https://google.com', {waitUntil: 'networkidle2'});并确保waitUntil值正在等待networkidle2。检查有关此值的文档。

  2. 您还可以在slowMo中运行puppeteer,以更好地了解正在发生的事情。此选项会将操作延迟指定的毫秒数。

const browser = await puppeteer.launch({
   headless: false,
   slowMo: 250 // slow down by 250ms
 }); ```