2017-08-29 93 views
3

我想監視一個頁面的網絡並獲取JavaScript網絡事件的所有URL,類似於PhantomJS'page.onResourceRequested正在做的事情,但我無法弄清楚如何使用Google Chrome的Puppeteer完成此操作。如何檢查網絡流量並獲取資源請求的URL?

我已經涉足與Google Chrome's puppeteer,但我無法弄清楚如何使它工作,因爲它的輸出看起來是這樣的:

Page { 
    domain: null, 
    _events: { 
     request: [Function] 
    }, 
    _eventsCount: 1, 
    _maxListeners: undefined, 
    _client: Session { 
     domain: null, 
     _events: { 
      'Page.frameAttached': [Function], 
      'Page.frameNavigated': [Function], 
      'Page.frameDetached': [Function], 
      'Runtime.executionContextCreated': [Function], 
      'Network.requestWillBeSent': [Function: bound _onRequestWillBeSent], 
      'Network.requestIntercepted': [Function: bound _onRequestIntercepted], 
      'Network.responseReceived': [Function: bound _onResponseReceived], 
      'Network.loadingFinished': [Function: bound _onLoadingFinished], 
      'Network.loadingFailed': [Function: bound _onLoadingFailed], 
      'Page.loadEventFired': [Function], 
      'Runtime.consoleAPICalled': [Function], 
      'Page.javascriptDialogOpening': [Function], 
      'Runtime.exceptionThrown': [Function], 
      'Security.certificateError': [Function], 
      'Inspector.targetCrashed': [Function] 
     }, 
     _eventsCount: 15, 
     _maxListeners: undefined, 
     _lastId: 14, 
     _callbacks: Map {}, 
     _connection: Connection { 
      domain: null, 
      _events: {}, 
      _eventsCount: 0, 
      _maxListeners: undefined, 
      _url: 'ws://127.0.0.1:65343/devtools/browser/ca214df4-4357-4b8f-8552-a1524d6652ff', 
      _lastId: 17, 
      _callbacks: Map {}, 
      _delay: 0, 
      _ws: [Object], 
      _sessions: [Object] 
     }, 
     _targetId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923', 
     _sessionId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923:1' 
    }, 
    _keyboard: Keyboard { 
     _client: Session { 
      domain: null, 
      _events: [Object], 
      _eventsCount: 15, 
      _maxListeners: undefined, 
      _lastId: 14, 
      _callbacks: Map {}, 
      _connection: [Object], 
      _targetId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923', 
      _sessionId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923:1' 
     }, 
     _modifiers: 0, 
     _pressedKeys: Set {} 
    }, 
    _mouse: Mouse { 
     _client: Session { 
      domain: null, 
      _events: [Object], 
      _eventsCount: 15, 
      _maxListeners: undefined, 
      _lastId: 14, 
      _callbacks: Map {}, 
      _connection: [Object], 
      _targetId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923', 
      _sessionId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923:1' 
     }, 
     _keyboard: Keyboard { 
      _client: [Object], 
      _modifiers: 0, 
      _pressedKeys: Set {} 
     }, 
     _x: 0, 
     _y: 0, 
     _button: 'none' 
    }, 
    _frameManager: FrameManager { 
     domain: null, 
     _events: { 
      frameattached: [Function], 
      framedetached: [Function], 
      framenavigated: [Function] 
     }, 
     _eventsCount: 3, 
     _maxListeners: undefined, 
     _client: Session { 
      domain: null, 
      _events: [Object], 
      _eventsCount: 15, 
      _maxListeners: undefined, 
      _lastId: 14, 
      _callbacks: Map {}, 
      _connection: [Object], 
      _targetId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923', 
      _sessionId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923:1' 
     }, 
     _mouse: Mouse { 
      _client: [Object], 
      _keyboard: [Object], 
      _x: 0, 
      _y: 0, 
      _button: 'none' 
     }, 
     _frames: Map { 
      '232.1' => [Object] 
     }, 
     _mainFrame: Frame { 
      _client: [Object], 
      _mouse: [Object], 
      _parentFrame: null, 
      _url: 'http://mytestdomain.com/', 
      _id: '232.1', 
      _defaultContextId: 4, 
      _waitTasks: Set {}, 
      _childFrames: Set {}, 
      _name: undefined, 
      _loadingFailed: false 
     } 
    }, 
    _networkManager: NetworkManager { 
     domain: null, 
     _events: { 
      request: [Function], 
      response: [Function], 
      requestfailed: [Function], 
      requestfinished: [Function] 
     }, 
     _eventsCount: 4, 
     _maxListeners: undefined, 
     _client: Session { 
      domain: null, 
      _events: [Object], 
      _eventsCount: 15, 
      _maxListeners: undefined, 
      _lastId: 14, 
      _callbacks: Map {}, 
      _connection: [Object], 
      _targetId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923', 
      _sessionId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923:1' 
     }, 
     _requestIdToRequest: Map {}, 
     _interceptionIdToRequest: Map { 
      null => [Object], 'id-1' => [Object], 'id-2' => [Object], 'id-3' => [Object] 
     }, 
     _extraHTTPHeaders: Map {}, 
     _requestInterceptionEnabled: true, 
     _requestHashToRequestIds: Multimap { 
      _map: [Object] 
     }, 
     _requestHashToInterceptions: Multimap { 
      _map: Map {} 
     } 
    }, 
    _emulationManager: EmulationManager { 
     _client: Session { 
      domain: null, 
      _events: [Object], 
      _eventsCount: 15, 
      _maxListeners: undefined, 
      _lastId: 14, 
      _callbacks: Map {}, 
      _connection: [Object], 
      _targetId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923', 
      _sessionId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923:1' 
     }, 
     _emulatingMobile: false, 
     _injectedTouchScriptId: null 
    }, 
    _tracing: Tracing { 
     _client: Session { 
      domain: null, 
      _events: [Object], 
      _eventsCount: 15, 
      _maxListeners: undefined, 
      _lastId: 14, 
      _callbacks: Map {}, 
      _connection: [Object], 
      _targetId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923', 
      _sessionId: 'bbd35bf4-d3ce-4497-a2a0-8cc98b4f0923:1' 
     }, 
     _recording: false, 
     _path: '' 
    }, 
    _pageBindings: Map {}, 
    _ignoreHTTPSErrors: false, 
    _screenshotTaskQueue: TaskQueue { 
     _chain: Promise { 
      undefined 
     } 
    }, 
    _viewport: { 
     width: 800, 
     height: 600 
    } 
} 

能否請你告訴我,我怎樣才能得到JavaScript與Puppeteer的網絡事件的所有網址?

回答

4

查看攔截圖像請求的sample。易於修改,以查看其他類型的資源請求:

await page.setRequestInterceptionEnabled(true); 
page.on('request', request => { 
    if (/\.js$/i.test(request.url)) { 
    // request for js resource 
    } 
    request.continue(); 
}); 
await page.goto('https://example.com');