CircleCI에서 Puppeteer 정기 실행

8998 단어 CircleCIpuppeteer

개요


  • Puppeteer를 CircleCI에서 매일 정해진 시간에 실행한다는 것을 만들었으므로 그 메모

  • 병아리 만들기


  • 샘플 용 병아리 만들기
  • mkdir puppeteer-sample
    cd puppeteer-sample
    yarn init -y
    # or
    npm init -y
    

    Puppeteer 소개



    설치


    yarn add puppeteer
    # or
    npm i puppeteer
    

    샘플 만들기


  • 이번에는 Puppeteer의 리포지토리에 있는 샘플을 사용한다
  • htps : // 기주 b. 코 m/오오 gぇCh 로메/푸페테에 r/bぉb/마s테 r/에아 mpぇs/세아 rch. js

  • htps : //에서 ゔぇぺぺrs. 오, ぇ. 코m/우ぇb/ 중에서 Headless Chrome 태그가 달린 기사를 추출하는 샘플


  • sample.js
    const puppeteer = require('puppeteer');
    
    (async() => {
      const browser = await puppeteer.launch();
      const page = await browser.newPage();
    
      await page.goto('https://developers.google.com/web/');
    
      // Type into search box.
      await page.type('#searchbox input', 'Headless Chrome');
    
      // Wait for suggest overlay to appear and click "show all results".
      const allResultsSelector = '.devsite-suggest-all-results';
      await page.waitForSelector(allResultsSelector);
      await page.click(allResultsSelector);
    
      // Wait for the results page to load and display the results.
      const resultsSelector = '.gsc-results .gsc-thumbnail-inside a.gs-title';
      await page.waitForSelector(resultsSelector);
    
      // Extract the results from the page.
      const links = await page.evaluate(resultsSelector => {
        const anchors = Array.from(document.querySelectorAll(resultsSelector));
        return anchors.map(anchor => {
          const title = anchor.textContent.split('|')[0].trim();
          return `${title} - ${anchor.href}`;
        });
      }, resultsSelector);
      console.log(links.join('\n'));
    
      await browser.close();
    })();
    

    CircleCI 설정


  • 구성 파일 만들기
  • 이번에는 6시간마다 실행되는 샘플

  • .circleci/config.yml
    version: 2
    jobs:
      execute:
        docker:
          - image: circleci/node:latest-browsers
        steps:
          - checkout
          - run: yarn install
          - run: node sample.js
    workflows:
      version: 2
      execute-workflow:
        triggers:
          - schedule:
              cron: '0 0,6,12,18 * * *' # UTC
              filters:
                branches:
                  only:
                    - master
        jobs:
          - execute
    
  • docker 이미지에 circleci/node:latest-browsers를 지정하면 이것만으로 Puppeteer가 움직였다
  • schedule에 cron의 설정으로 실행 타이밍을 지정할 수 있다
  • 0 */6 * * * 같은 글을 쓰면 오류가 발생하고 조금 빠졌습니다


  • 실행


  • 소스 코드를 Github에 푸시하여 CircleCI와 연동시킵니다


  • 타이밍이 오면 자동으로 시작됩니다

  • 좋은 웹페이지 즐겨찾기