更新
我遇到的问题可以在没有伪造者的Chrome中重现。我可以在浏览器中看到文本,但是无法通过javascript控制台访问数据。
原始
facebook隐私设置页面具有从浏览器可见的选项,我可以对其进行检查。问题在于document.querySelector中的值为空。
以下是网址: https://www.facebook.com/settings
这是代码
const el = await page.$x(
'/html/body/div[1]/div[3]/div[1]/div/div[2]/div[2]/div[2]/div/ul/li[1]/div/div/ul/li[1]/a/span[3]/div/div[2]'
);
const v = await page.evaluate((div) => div.textContent, el[0]);
我也尝试过使用JS Path
const v = await page.evaluate(
() =>
(<HTMLElement>(
document.querySelector(
'#u_fetchstream_2_4 > li:nth-child(1) > div > div > ul > li:nth-child(1) > a > span.fbSettingsListItemContent.fcg > div > div._nlm.fwb'
)
)).innerText
);
总是出现以下错误:
Error: Evaluation failed: TypeError: Cannot read property 'innerText' of null
我已经确认该属性为null,直到我右键单击检查页面上的任何值-自动检测程序仍然显示该页面?!
还尝试在Chrome的控制台中使用xpath:
$x('//*[text()="Who can see your future posts?"]')
返回[]
答案 0 :(得分:2)
您极有可能尝试以不同的视口尺寸打开URL。这类问题发生在响应式网站上,这些网站的选择器与您在浏览器中选择器的选择大不相同。
最简单的方法是禁用默认的800x600分辨率并打开抬头模式,这样您就可以查看正在发生的事情以及失败的原因。
const browser = await puppeteer.launch({defaultViewport: null, headless: false});
对于畅通无阻,facebook和其他大公司真的不希望您将它们刮掉。因此,您需要结合使用代理,用户代理和保持警惕。
您可以尝试使用隐身插件,该插件将尝试一些解锁技术。
const puppeteer = require('puppeteer-extra')
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
puppeteer.use(StealthPlugin())
免责声明:强烈建议对Facebook使用虚拟帐户,以免被禁止。他们真的不喜欢平台上的机器人。