我正在用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云计算引擎上尝试过。但没有运气..
任何人都遇到过类似的问题...如果是,请您能帮我吗。
答案 0 :(得分:0)
*免责声明:我的服务器是Ubuntu,所以希望能对您有所帮助,但可能会略有不同。
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
同样,由于您运行的是不同的系统,因此您可能会稍有不同,但是请务必确保使用与系统等效的过程来安装依赖项。
如果这一切都很好,那么您将需要检查代码部分,如下所示:
await page.goto('https://google.com', {waitUntil: 'networkidle2'});
并确保waitUntil值正在等待networkidle2。检查有关此值的文档。
您还可以在slowMo中运行puppeteer,以更好地了解正在发生的事情。此选项会将操作延迟指定的毫秒数。
const browser = await puppeteer.launch({
headless: false,
slowMo: 250 // slow down by 250ms
}); ```