NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# C# .NET 매크로 프로그램 만들기. (웹 브라우저 쿠키 생성, 삭제 그리고 정보 확인하기)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 오늘은 웹브라우저 쿠키를 제어할 수 있는 액션을 만들어 볼건데요. 사실, 웹개발자가 아니면 쿠키가 뭔지 왜 이런걸 만들어서 사용하는지 잘 모를 수 있습니다. 개발자라 하더라도 윈도우 프로그램이나 서버 프로그램을 주로 했던 분들도 잘 모를 수 있습니다. 웹개발 아니면 사실 쓸일이 없으니까요. 우선, 쿠키가 뭔지 알아봐야겠네요. 쿠키는 보통 HTTP 쿠키 또는 브라우저 쿠키라고 부릅니다.

     

    쿠키는 웹 서버가 생성하여 웹 브라우저로 전송하는 작은 정보 파일입니다. 웹 브라우저는 수신한 쿠키를 미리 정해진 기간 동안 또는 웹 사이트에서의 사용자 세션 기간 동안 저장합니다. 웹 브라우저는 향후 사용자가 웹 서버에 요청할 때 관련 쿠키를 첨부합니다. 쿠키는 웹 사이트에 사용자에 대한 정보를 제공하여 웹 사이트에서 사용자 경험을 맞춤화하는 데 도움이 됩니다. 예를 들어, 전자 상거래 웹 사이트에서는 쿠키를 사용하여 사용자가 장바구니에 어떤 상품을 담았는지 파악합니다. 또한 인증 쿠키(아래 참조)와 같이 보안을 위해 필요한 쿠키도 있습니다. 대부분의 웹과 마찬가지로 쿠키는 HTTP 프로토콜을 사용하여 전송됩니다.

    IZ5rCSu.jpeg

     

     

    웹소켓을 이용해서 트레픽을 발생시키거나 조회수나 검색등등... 마케팅에 필수적으로 사용되는 정보가 쿠키입니다. 일반적으로 셀레니움으로는 한계가 있기 때문에 웹소켓을 이용하는데요. 엔지엠 매크로에는 쉽게 사용할 수 있는 액션들이 존재합니다. 그렇더라도 자신이 사용할 사이트의 쿠키 정보는 어느정도 알고 있어야 합니다. 네이버의 경우에는 JSESSIONID를 사용합니다. 이외에도 PHPSESSID와 ASP.NET_SessionId와 같은 닷넷 쿠키도 있습니다.

     

    쿠키 모델을 하나 만들어주세요.

    iR42yKY.png

     

     

    기본적으로 쿠키도 웹 관련 기능이기 때문에 웹 베이스 모델을 상속 받아야 합니다.

    public class CookieModel : WebBaseModel

     

    속성들은 쿠키의 정보를 탐색할 수 있는 것들로 되어 있습니다. 대부분 쿠키의 값은 암호화되어 저장되기 때문에 클라이언트에서 내용을 확인하기란 쉽지 않습니다. 하지만, 쿠키 정보를 임의적으로 재사용하기 위해 필요하기도 합니다. 예를 들어서 로그인 관련 인증 정보를 서버와 클라이언트가 쿠키로 비교하는데요. 동일한 도메인의 사이트라면 이 내용으로 세션이 만료되기 전 인증을 유지할 수 있게됩니다. 이 내용은 고객 자료실 내용을 참고해보세요.

    [LocalizedCategory("Data")]
    [LocalizedDisplayName("CookieNames")]
    [LocalizedDescription("CookieNames")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string[]? CookieNames { get; set; }
    
    [LocalizedCategory("Data")]
    [LocalizedDisplayName("CookieValue")]
    [LocalizedDescription("CookieValue")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string? CookieValue { get; set; }
    
    [LocalizedCategory("Data")]
    [LocalizedDisplayName("CookiePath")]
    [LocalizedDescription("CookiePath")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string? CookiePath { get; set; }
    
    [LocalizedCategory("Data")]
    [LocalizedDisplayName("CookieDomain")]
    [LocalizedDescription("CookieDomain")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string? CookieDomain { get; set; }
    
    [LocalizedCategory("Data")]
    [LocalizedDisplayName("SameSite")]
    [LocalizedDescription("SameSite")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string? SameSite { get; set; }
    
    [LocalizedCategory("Data")]
    [LocalizedDisplayName("IsHttpOnly")]
    [LocalizedDescription("IsHttpOnly")]
    [Browsable(true)]
    [DefaultValue(false)]
    public bool IsHttpOnly { get; set; }
    
    [LocalizedCategory("Data")]
    [LocalizedDisplayName("Secure")]
    [LocalizedDescription("Secure")]
    [Browsable(true)]
    [DefaultValue(false)]
    public bool Secure { get; set; }
    
    [LocalizedCategory("Data")]
    [LocalizedDisplayName("CookieExpiry")]
    [LocalizedDescription("CookieExpiry")]
    [Browsable(true)]
    [DefaultValue(null)]
    public DateTime? CookieExpiry {  get; set; }

     

    브라우저 쿠키를 모두 확인할 수 있습니다. 그래서, 데이터에 쿠키 이름 목록이 필요합니다. 이미 쿠키 이름을 알고 있다면 상관 없지만, 접속한 사이트가 어떤 쿠키를 사용하는지 알려면 일단 한번 실행해야 합니다. 그리고, 쿠키 정보를 가져와서 분석할 수 있습니다. 앞의 강좌에서 알아본것처럼 새 사용자를 만들고, 해당 폴더에 쿠키 정보를 심으면 로그인 정보나 장바구니 상품 정보등등... 다양한 것들을 처리할 수 있습니다.

     

    액션은 2가지입니다. 웹브라우저의 쿠키를 제어하려면 쿠키 이름을 알아야 합니다. 그리고, 어떤 동작을 수행할지 선택해야 하겠죠?

    [LocalizedCategory("Action")]
    [LocalizedDisplayName("CookieName")]
    [LocalizedDescription("CookieName")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string? CookieName { get; set; }
    
    [LocalizedCategory("Action")]
    [LocalizedDisplayName("CookieOption")]
    [LocalizedDescription("CookieOption")]
    [Browsable(true)]
    [DefaultValue(typeof(Ai.Definition.AddDelete), "None")]
    public Ai.Definition.AddDelete CookieOption { get; set; } = Definition.AddDelete.None;

     

    쿠키 제어는 None을 제외한 3가지 옵션이 있습니다. 쿠키를 추가하거나 삭제 또는 모든 쿠키를 제거할수도 있습니다.

    public enum AddDelete
    {
        None = 0,
        Add = 1,
        Delete = 2,
        AllDelete = 3
    }

     

    옵션에 따라서 로직을 분기하고, 각각의 동작을 구현해줍니다.

    public override string? Execute(IPlayer player)
    {
        var id = base.Execute(player);
    
        var driver = player.Manager.WebDrivers[WebName];
    
        CookieNames = driver.Manage().Cookies.AllCookies.Select(s => s.Name).ToArray();
    
        if (!string.IsNullOrEmpty(CookieName))
        {
            switch (CookieOption)
            {
                case Definition.AddDelete.Add:
                    driver.Manage().Cookies.AddCookie(
                        new OpenQA.Selenium.Cookie(
                            CookieName,
                            AddCookieValue,
                            AddCookieDomain,
                            AddCookiePath,
                            AddCookieExpiry,
                            AddSecure,
                            AddIsHttpOnly,
                            AddSameSite));
                    break;
                case Definition.AddDelete.Delete:
                    driver.Manage().Cookies.DeleteCookieNamed(CookieName);
                    break;
                case Definition.AddDelete.AllDelete:
                    driver.Manage().Cookies.DeleteAllCookies();
                    break;
            }
    
            var cookie = driver.Manage().Cookies.GetCookieNamed(CookieName);
    
            if (cookie != null)
            {
                CookieValue = cookie.Value;
                CookiePath = cookie.Path;
                CookieDomain = cookie.Domain;
                SameSite = cookie.SameSite;
                IsHttpOnly = cookie.IsHttpOnly;
                CookieExpiry = cookie.Expiry;
            }
        }
    
        return id;
    }

     

    실제 구현 내용을 보면 크게 어려운건 없을겁니다. 이 내용을 토대로 테스트를 해보면, 쿠키 정보도 확인할 수 있고 새로운 쿠키를 만들어서 추가할수도 있습니다. 아래는 네이버에 접속한 후 쿠키 이름 목록을 모두 가져왔습니다. 쿠키 이름을 알면, 네이버의 모든 쿠키 정보를 확인할 수 있습니다.

    kyL6rzg.png

     

     

    쿠키 액션에서 쿠키 이름을 추가하면 해당 쿠키의 모든 정보를 확인할 수 있습니다.

    B3efoIa.png

     

     

    쿠키를 제어하는 옵션에 따라서 삭제하거나 추가할 수 있습니다.

    AusY0J3.png

     

     

    아래 동영상을 참고해서 동작을 테스트 해보세요.

     

     

    유튜브 추천, 구독, 좋아요 꼭 눌러주세요!

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.