木偶在Facebook设置页面上返回null

时间:2020-07-06 18:26:25

标签: facebook xpath puppeteer

更新

我遇到的问题可以在没有伪造者的Chrome中重现。我可以在浏览器中看到文本,但是无法通过javascript控制台访问数据。

原始

facebook隐私设置页面具有从浏览器可见的选项,我可以对其进行检查。问题在于document.querySelector中的值为空。

enter image description here

以下是网址: 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?"]')

返回[]

1 个答案:

答案 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使用虚拟帐户,以免被禁止。他们真的不喜欢平台上的机器人。

相关问题