NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 팁 앤 테크
  • 매뉴얼

    팁과 테크니컬 노하우를 확인하세요.

    팁 앤 테크

    팁과 테크니컬 노하우를 확인하세요.

    본 사이트의 컨텐츠는 저작권법의 보호를 받으므로 무단 복사, 게재, 배포 등을 금합니다.

    커스텀 엔지엠 매크로 커스텀 액션 - 웹크롤링이 가능한 커스텀 모듈 만들어서 사용 해보기. (with Puppeteer)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 RPA 매크로에는 웹 API 액션들이 존재합니다. 여기에 있는 액션들을 이용해도 충분하지만~ 셀레니움(Selenium) 기반 웹 API가 아닌 Puppeteer를 사용해서 크롤링을 해보도록 하겠습니다. 우선, 커스텀 액션을 만드는거라서 엔지엠소프트웨어에 커스텀 모듈을 받아야 합니다. 그리고, 아래와 같이 내문서 > NGM6 폴더에 복사하세요. 커스텀 개발에 필요한 인터페이스 모듈은 총 3개입니다.

    tmDJBMP.png

     

     

    이제 Visual Studio 2022 Community를 실행하고, 새로운 프로젝트를 하나 만듭니다. 커스텀 모듈 개발 가이드는 아래 링크에 자세하게 소개되어 있습니다. 아래 내용을 천천히 읽어보시면 커스텀 모듈 액션을 개발하기 위한 환경 셋팅과 기초적인 학습 내용이 있으니 꼭 처음부터 읽어보세요.

    [ 커스텀 모듈 개발 가이드 ]

     

    새 프로젝트 추가에서 클래스 라이브러리(.NET Framework)를 선택하고, 우측 하단의 다음을 클릭하세요.

    X2AxscQ.png

     

     

    프로젝트 이름은 CustomWebCrawlingModlue입니다. 이름은 자유롭게 하셔도 되지만 Custom으로 시작해야 합니다.

    wpGPtod.png

     

     

    새로운 프로젝트가 추가되었습니다.

    T1APSup.png

     

     

    기본 클래스 이름을 CustomPuppeteerModel로 변경해줍니다. 프로젝트 nuget에서 puppeteer를 검색하고 PuppeteerExtraSharp을 설치하세요.

    USKBnXE.png

     

     

    종속성을 가지는 모듈들도 같이 설치됩니다.

    yaOABgq.png

     

     

    프로젝트의 참조에서 우클릭하고 추가를 선택하세요. 참조 관리자가 표시되고 찾아보기를 클릭하세요. 참조할 파일 선택창에서 커스텀 개발 관련 모듈 3개를 추가합니다.

    BAxWwLW.png

     

     

    아래와 같이 NGM.Models.Interface.BaseCustomToolModel을 상속 받으세요. 그리고, Abstract Property(추상 속성)Abstract Method(추상 메소드)를 추가 해줍니다.

    namespace CustomWebCrawlingModule
    {
        public class CustomPuppeteerModel : NGM.Models.Interface.BaseCustomToolModel
        {
            public override string DisplayCategory => throw new NotImplementedException();
    
            public override string DisplayName => throw new NotImplementedException();
    
            public override void Execute()
            {
                throw new NotImplementedException();
            }
        }
    }

     

    아래와 같이 DisplayCategory 속성의 값을 "웹크롤링"으로 입력하세요. 이 속성은 엔지엠 에디터의 도구 상자에서 표시되는 카테고리 이름입니다. 그리고, DisplayName은 "크롤러"로 입력하세요. 웹크롤링 카테고리 안에 표시되는 액션의 이름입니다. 2개의 속성은 사용자가 관리하기 편한 임의의 이름으로 설정해도 됩니다. 추가로, 크롤링한 사이트의 HTML 소스를 보여주기 위해 Result 속성을 하나 추가했습니다. 그리고, 사용자로부터 크롤링할 사이트의 주소를 입력 받을 URL 속성도 추가하세요.

    namespace CustomWebCrawlingModule
    {
        public class CustomPuppeteerModel : NGM.Models.Interface.BaseCustomToolModel
        {
            public override string DisplayCategory => "웹크롤링";
    
            public override string DisplayName => "크롤러";
    
            [Category("Data")]
            [DisplayName("사이트 소스")]
            [Description("크롤링한 사이트의 HTML 소스입니다.")]
            [Browsable(true)]
            [DefaultValue(null)]
            [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
            public string Result { get; set; }
    
            [Category("Action")]
            [DisplayName("사이트 주소")]
            [Description("크롤링할 사이트의 주소를 입력하세요.")]
            [Browsable(true)]
            [DefaultValue(null)]
            [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
            public string URL { get; set; }
    
            public override void Execute()
            {
                
            }
        }
    }

     

    마지막으로 Execute 메소드를 아래와 같이 코딩합니다.

    using var browserFetcher = new BrowserFetcher();
    await browserFetcher.DownloadAsync();
    await using var browser = await Puppeteer.LaunchAsync(
        new LaunchOptions { Headless = true });
    await using var page = await browser.NewPageAsync();
    await page.GoToAsync("http://www.google.com");
    await page.ScreenshotAsync(outputFile);
    Result = await page.GetContentAsync();

     

    커스텀 모듈을 빌드한 후 엔지엠 에디터에 커스텀 모듈을 설치합니다.

    imgvnQk.png

     

     

    그리고, 새 스크립트에 크롤러 액션을 추가하세요. 크롤링할 사이트 주소를 입력하고 실행하면 HTML 소스를 뽑아올 수 있습니다.

    Y8zRxcA.png

     

     

    Puppeteer는 다양한 플러그인을 사용할 수 있는데요. 기본적으로 스텔스 플러그인을 사용하여 자동화 소프트웨어 감지를 우회하도록 했습니다. 이외에도 익명 사용자 로그인과 리캡챠를 우회할 수 있는 플러그인들도 존재합니다. 또한, 모든 메소드가 비동기로 동작하기 때문에 웹 특성상 페이지 로딩이 완료되자마자 다음 메소드가 호출됩니다. 따라서 딜레이없이 업무 자동화 매크로를 제작할 수 있습니다. Selenium과 Puppeteer은 서로 장단점이 명확합니다. 아무래도 셀레니움이 더 범용적이고 알려진 방식이고, 퍼펫티어는 그리 많이 사용되지 않고 있습니다. 셀레니움이 비해 몇가지 장점을 가지고 있긴하지만, 범용성면에서 아직까지는 많이 부족하거든요. 아무튼~ 선착순이나 예약 또는 순위를 올리기 위한 500타 1,000타를 올리기 위한 작업에는 도움이 될 수 있을거 같습니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.