퍼펫티어 request, response ( 작성중 )퍼펫티어 request, response ( 작성중 )

Posted at 2020. 5. 29. 22:38 | Posted in Node.js/Puppeteer
반응형






    await page.on("response", async(response) => {
        console.log(await response.url());
        console.log(await response.json());
    });




    await  page.on("request", request => {
        console.log("123");
        request.continue({
              url:"사이트 URL"
            , method:"GET"
            , postData: JSON.stringify({ test:"test" })
            , headers: { "Content-Type":"application/json" },
        });
    }); 





반응형
//

[Puppeteer] 퍼펫티어를 이용해 File Upload 하기[Puppeteer] 퍼펫티어를 이용해 File Upload 하기

Posted at 2020. 5. 29. 21:26 | Posted in Node.js/Puppeteer
반응형





■ 퍼펫티어를 이용해 파일 업로드하기






퍼펫티어를 통한 사무자동화 작업중 사이트의 파일 업로드를 해야하는 경우가 발생하였다.


문제는 헤드리스 모드( 작업화면이 사용자에게 보이지않는 ) 상황으로 완성품을 만들기위해서는.


업로드 버튼을 누르고 → 파일을 찾고 → 이미지를 업로드 하는 과정을


컴퓨터 화면을 보지 않고 진행을 해야한다는 것이다.









다행이 퍼펫티어에서는 waitForFileChooser( ) 메서드를 통해


해결할 수 있는 방법을 제공한다.


아래 코드를 통해 관련 작업을 진행해 보자.




# 소스코드 - node.js

 fileUpload.php

const puppeteer = require( "puppeteer" );


// 사용시 인위적인 딜레이를 주기위한 함수

function delay( timeout ) {

    return new Promise(( resolve ) => {

      setTimeout( resolve, timeout );

    });

}


puppeteer.launch({

      headless : false          // 헤드리스모드의 사용여부를 묻는다.

    , devtools : false          // 개발자 모드의 사용여부를 묻는다.

    , slowMo : 50          // 지정된 시간(ms)만큼 Puppeteer 작업 속도를 낮춘다.

}).then(async browser => {


    const page = await browser.newPage();

    await page.goto( "http://localhost/fileUpload.php", { waitUntil : "networkidle2" } );


    const [fileChooser] = await Promise.all( [

        page.waitForFileChooser( ),

        page.click( "#upFile" )         // 파일을 올릴 input type = "file" 태그를 지정

    ] );


    await fileChooser.accept( [ "puppeteer.png" ] );


    // 3초간딜레이를 준다.

    await delay( 3000 );


    page.waitForNavigation( ),page.click( "#upBtn" );


    // await browser.close( );

});




해당 포스팅은 운영중인 어느 사이트가 아닌


업로드 기능을 가진 페이지를 기준으로 테스트를 진행하려 한다.


아래 파일을 업로드할 웹 페이지를 간단히 제작하자.




# 소스코드 - PHP

 fileUpload.php

<?php

    echo "<pre>";

    print_r( $_FILES );

    echo "</pre>";

?>

<html>

<head>

<title>:: Puppeteer 업로드 속성 ::</title>

<script type="text/javascript">

    function fileUpload() {

        document.getElementById("upFrm").action = "./fileUpload.php";

        document.getElementById("upFrm").submit();

    }

</script>

</head>

<body>

    <form enctype="multipart/form-data" id="upFrm" method="post">

        <input type="file" id="upFile" name="upFile" accept="image/*">

        <br/><br/>

        <input type="button" onClick="fileUpload();" id="upBtn" value="업로드">

    </form>

</body>

</html>





# 출력결과




그럼 위의 이미지와 같이, 지정한 이미지를 자동으로 업로드 해주는 모습을 확인 할 수 있다.







반응형
//

[Puppeteer] 퍼펫티어 setViewport()를 사용한 창 크기 조절[Puppeteer] 퍼펫티어 setViewport()를 사용한 창 크기 조절

Posted at 2020. 5. 29. 15:23 | Posted in Node.js/Puppeteer
반응형




■ 퍼펫티어 창 크기 조절하기





퍼펫티어를 이용한 작업을 진행하다 보면


화면에 표시되는 영역의 크기가 작아서 답답한 경우가 발생한다.






브라우저의 크기를 아무리 늘려도 출력되는 페이지의 크기는 변화가 없다.


실제 서비스하는경우는 headless : true로 설정하여 보이지 않게 하고 작업을 진행하겠지만.


서비스 개발중에는 종종 답답한 경우가 발생한다. 


setViewport( ) 설정을 통해 이런 답답한 점을 해결해보자.




# 소스코드

 puppeteer.viewport.js

const puppeteer = require("puppeteer");


puppeteer.launch({

      headless : false // 헤드리스모드의 사용여부를 묻는다.

    , devtools : false // 개발자 모드의 사용여부를 묻는다.

    , slowMo : 0            // 지정된 시간(ms)까지 Puppeteer 작업속도를 느리게 한다.


}).then(async browser => {


    const page = await browser.newPage();


    await page.setViewport({

          width : 1280               // 페이지 너비

        , height : 720                // 페이지 높이

        , deviceScaleFactor : 1     // 기기 배율 요소를 지정 DPR( Device Pixel Resolution )

        , isMobile : false            // 모바일

        , hasTouch : false           // 터치 이벤트 발생여부

        , isLandscape : false        //

    });


    await page.goto( "https://github.com/puppeteer/puppeteer/blob/master/docs/api.md", { waitUntil : "networkidle2" } );

});





# 출력 결과

 $ node puppeteer.viewport.js



위와같이 출력화면이 브라우저 가득 커져서 나오는 것을 확인 할 수 있다.








반응형
//

[Puppeteer] evaluate() 페이지 데이터 추출[Puppeteer] evaluate() 페이지 데이터 추출

Posted at 2020. 5. 27. 13:54 | Posted in Node.js/Puppeteer
반응형





■ evaluate( )를 이용하여 페이지내의 데이터 가져오기




티스토리 블로그에 로그인을 하려면


로컬 스토리지의 tistoryFingerprint 값이 필요하다.






샘플로예제로 위 데이터를 가지고와 보자.




# 소스코드

 evaluate_get.js

const puppeteer = require("puppeteer");


// 사용시 인위적인 딜레이를 주기위한 함수

function delay( timeout ) {

  return new Promise(( resolve ) => {

    setTimeout( resolve, timeout );

  });

}


puppeteer.launch({

          headless : false // 헤드리스모드의 사용여부를 묻는다.

, devtools : true // 개발자 모드의 사용여부를 묻는다.


}).then(async browser => {


    const page = await browser.newPage();


    await page.goto( "https://www.tistory.com/auth/login", { waitUntil : "networkidle2" } );


    await page.setRequestInterception(true);


    const pageGetData = await page.evaluate(() => {

        const jsonData = {

            "fingerPrint" : localStorage.getItem( "tistoryFingerprint" )

        };

        return jsonData;

    });


    console.log( pageGetData.fingerPrint );

});



이제 실행해보면 tistoryFingerprint값을 가져올 수 있는 모습을 확인 할 수 있다.



# 출력결과

 $ node evaluate_get.js 











반응형
//