rev*_*evy 5 javascript google-chrome node.js headless-browser puppeteer
我试图使用Puppeteer在 Linkedin 上打开一个上市公司页面,但每次它都会重定向到身份验证表单。当我在 Chromium 或 Chrome 中手动粘贴 URL 时,不会发生这种情况。
这是代码:
const puppeteer = require("puppeteer");
(async () => {
const url = "https://www.linkedin.com/company/google/";
const browser = await puppeteer.launch({
headless: false,
args: [
"--lang=en-GB",
"--no-sandbox",
"--disable-setuid-sandbox",
"--disable-gpu",
"--disable-dev-shm-usage",
],
defaultViewport: null,
pipe: true,
slowMo: 30,
});
const page = await browser.newPage();
await page.goto(url, {
waitUntil: 'networkidle0',
});
await page.waitForSelector(".top-card-layout__entity-info-container", { timeout: 10000 });
await page.close();
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)
这是浏览器重定向的地方:
https://www.linkedin.com/company/google/
如果我在 Chromium 或 Chrome 中手动粘贴 URL,则不会发生这种情况。
到目前为止我已经尝试过:
incognito
浏览器上下文:// [...]
const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage();
// [...]
Run Code Online (Sandbox Code Playgroud)
const puppeteer = require("puppeteer-extra");
puppeteer.use(require("puppeteer-extra-plugin-stealth")());
// [...]
Run Code Online (Sandbox Code Playgroud)
const randomUserAgent = require("random-useragent");
// [...]
await page.setUserAgent(randomUserAgent.getRandom());
// [...]
Run Code Online (Sandbox Code Playgroud)
没有任何效果。还有什么我可以尝试的吗?
这是由于微软对配置文件的极端保护。如果您能够以隐身模式访问公开资料,我认为是某些共享 cookie 造成的,但通常情况下,由于 AuthWall(在这种情况下会阻止您),您无法在不登录的情况下访问 LinkedIn 上的公开公司资料。对我来说,即使是在非隐身窗口中,也始终需要登录。
\n数据专家 John Koala 的一些背景知识:
\n\n\n当微软收购 LinkedIn 时,他们投资了数十亿美元。\n他们也开始采取行动,很快他们就与抓取展开了斗争。\n像现在这样出名的公司,由于它\xe2\x80\x99的法庭诉讼,\xe2\x80\x9cHiQ Labs \xe2\x80\x9d利用LinkedIn数据赚取巨额利润。
\n现在,LinkedIn 面临的问题是,公共抓取不构成法律犯罪,他们未能(像所有其他网站一样)阻止成熟的公共抓取。
\n因此LinkedIn添加并加强了一个名为\xe2\x80\x9cAuthwall\xe2\x80\x9d的功能,这是一个非常敏感的抓取检测。它很少允许来自非授权帐户的任何公共视图,因此无法在没有帐户的情况下进行抓取。
\n使用帐户进行抓取是一种违法行为,而且\xe2\x80\x99 的难度要大得多,因为需要维护帐户。\n此时 HiQ Labs 和所有其他抓取公司都倒闭了。\nHiQ 的利润下降了数百万美元在水槽边,他们在法庭上与 LinkedIn 展开了斗争。
\n唯一剩下的公司是 \xe2\x80\x9cscraping.services\xe2\x80\x9c,未来几年将会发生的事情将会很有趣。
\n
资料来源:John Koala,为什么 LinkedIn 不再允许我在不登录的情况下查看公开个人资料?在: 法定人数
\n我确信整个前 puppeteer 团队现在在 Microsoft 工作这一事实也不会让欺骗 AuthWall 变得更容易(参见:即使使用 puppeteer-extra-plugin-stealth 也无法访问该页面)。
\n稳定访问 LinkedIn 页面的唯一方法是使用表单登录(或使用已登录且已具有有效会话 cookie 的 chrome 配置文件)。
\n更新:由于使用现有帐户进行抓取违反了 LinkedIn 的用户协议:不建议这样做。我的上述解决方案仅适用于一次性访问(无论如何这都不是有效的场景)。所以最终的答案是:不可能用 puppeteer 访问这些配置文件。
\n