【问题标题】:Puppeteer chrome get active/visible tabPuppeteer chrome 获得活动/可见选项卡
【发布时间】:2018-12-04 23:30:10
【问题描述】:

在 chrome 扩展程序中,您可以使用下面的方法在窗口中找到活动标签

chrome.tabs.query({
            currentWindow: true,
            active: true,
        }

我有一个连接到现有浏览器并获取所有页面的以下代码。我无法确定是否有办法让我知道当前哪个选项卡/页面是活动的并获取其 url(page.url(),但是要使用数组中的哪一个?)

const puppeteer = require('puppeteer');

debuggerUrl = "http://127.0.0.1:9999/json/version"

const request = require('request');

request(debuggerUrl, function (error, response, body) {
  data = JSON.parse(body);
  webSocketDebuggerUrl = data["webSocketDebuggerUrl"];
  console.log("Connecting to ", webSocketDebuggerUrl);
  puppeteer.connect({browserWSEndpoint: webSocketDebuggerUrl}).then(async browser => {
    var pages = await browser.pages();
    console.log(pages);
    console.log(await browser.targets())
    await browser.disconnect();
  })
});

【问题讨论】:

  • 我正在努力实现同样的目标。你做到了吗?
  • 不,无法在此获得任何信息

标签: node.js google-chrome google-chrome-extension puppeteer


【解决方案1】:
    const pages = await browser.pages();
    const vis_results = await Promise.all(pages.map(async (p) => {
        const state = await p.evaluate(() => document.webkitHidden);
        return !state;
    }));
    let visiblePage = pages.filter((_v, index) => vis_results[index])[0];

【讨论】:

    【解决方案2】:

    document.hidden 现已弃用。但是我们可以使用document.visibilityState

    请注意,page 将始终引用同一个选项卡,即使您已更改为不同的选项卡。所以你必须手动将page 更改为活动标签。

    const pages = await browser.pages();
    // this will return list of active tab (which is pages object in puppeteer)
    const visiblePages = pages.filter(async (p) => {
      const state = await p.evaluate(() => document.visibilityState);
      return state === 'visible';
    });
    const activeTab = visiblePages[0]; // since there should be only 1 active tab per window
    

    【讨论】:

      【解决方案3】:

      使用document.hidden

      const pages = await browser.pages()
      let page
      for (let i = 0; i < pages.length && !page; i++) {
          const isHidden = await pages[i].evaluate(() => document.hidden)
          if (!isHidden) {
              page = pages[i]
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-04
        • 2021-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-02
        • 2016-11-26
        • 2019-12-09
        相关资源
        最近更新 更多