2020-2-10 TIL

  • MS에서 만든 playwright라는 모듈을 이용해서 크롤러를 만들고있다. 만들면서 문제를 발견해서 정리해본다.

playwright공식 다큐먼트를 들어가보면 아래와 같은 공식 스펙을 확인할 수 있다.

class: Browser
extends: EventEmitter
A Browser is created when Playwright connects to a browser instance, either through browserType.launch or browserType.connect.

An example of using a Browser to create a Page:

const { firefox } = require('playwright');  // Or 'chromium' or 'webkit'.

(async () => {
  const browser = await firefox.launch();
  const page = await browser.newPage('https://example.com');
  await browser.close();
})();
See ChromiumBrowser, FirefoxBrowser and WebKitBrowser for browser-specific features. Note that browserType.connect(options) and browserType.launch(options) always return a specific browser instance, based on the browser being connected to or launched.

event: 'disconnected'
browser.browserContexts()
browser.close()
browser.isConnected()
browser.newContext(options)
browser.newPage(url, [options])
browser.pages()
  • 나의 경우 browser.newPage(url, [options])를 이용해서 만들어야되는데, 계속 newPage is undefined 에러가 발생을 했다. 이 부분을 해결하고자 모듈 내부를 직접 들어다 보았다.
export interface Browser extends platform.EventEmitterType {
    newContext(options?: BrowserContextOptions): Promise<BrowserContext>;
    browserContexts(): BrowserContext[];
    defaultContext(): BrowserContext;
    disconnect(): Promise<void>;
    isConnected(): boolean;
    close(): Promise<void>;
}
  • playwright의 모듈 내부를 들어가보니 Browser의 스펙에는 newPage() method가 정의되어있지 않았다. 이를 통해 실제코드와 api문서가 다른것을 확인할 수 있었다.
  • playwright repo를 fork했으며 이 부분을 contribute하기 위한 방법을 찾아봐야겠다. 오픈소스를 들여다본다라는 표현은 많이 들었는데, 내가 실제로 해볼 수 있다는것에 놀라웠다.
Written on February 10, 2020