훈, IT 공부/C#

C#, ChromeDriver 활용한 크롤링 자동화처리 네이버 웹툰 리스트 불러오기

IT훈이 2022. 6. 22.
반응형

C#, ChromeDriver 활용한 크롤링 자동화처리 네이버 웹툰 리스트 불러오기 

 

 

자동화 툴 개발을 위하여

이것저것 만들어보면서 

기능을 익히고 있습니다.

 

그 과정에서 나온 

'웹툰리스트 불러오기'

 

 

 

크롤링 타켓

네이버에 있는 웹툰을 대상으로 월별로 모아서 보여주는 기능을 만들어보려합니다.

 

요일별로 리스트들이 어떻게 구성이 되어있는지 파악. ul 태그로 만들어져있네요. 그냥 for문으로 긁어오면 될듯..

 

 

기본 화면디자인 ( Form )

월별 리스트와 크롤링을 동작시키기 위한 버튼을 추가하였습니다.

 

핵심소스코드 

해당 자동화 로직의 핵심 부분이라고 할 수 있는 소스 코드입니다. 크롤링을 하는 경로는 xPath 기준으로 가져와서 사용하도록 하였습니다.

switch (i)
{
    case 1:
        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
        listBox1.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
        break;
    case 2:
        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
        listBox2.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
        break;
    case 3:
        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
        listBox3.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
        break;
    case 4:
        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
        listBox4.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
        break;
    case 5:
        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
        listBox5.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
        break;
    case 6:
        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
        listBox6.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
        break;
    case 7:
        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
        listBox7.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
        break;
    default:
        break;
}

 

참고사항

참고소스코드

 

콘솔화면을 없이 실행하고 싶다면 추가

chromeService.HideCommandPromptWindow = true;

 

크롬드라이버가 동작하는것을 보고싶지 않다면 추가

  ChromeOptions options = new ChromeOptions();
            options.AddArgument("--headless");

 

 

전체 소스코드 

private void GetWeebtoonList()
{
    ChromeDriverService chromeService = ChromeDriverService.CreateDefaultService();
    chromeService.HideCommandPromptWindow = true;

    ChromeOptions options = new ChromeOptions();
    options.AddArgument("--headless");
    ChromeDriver driver = new ChromeDriver(chromeService, options);
    
    driver.Url = "https://comic.naver.com/webtoon/weekday";
    
    string xPath = "";
    listClear();
    for (int i = 1; i < 8; i++)
    {
        try
        {
            for (int j = 1; j < 100; j++)
            {
                switch (i)
                {
                    case 1:
                        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
                        listBox1.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
                        break;
                    case 2:
                        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
                        listBox2.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
                        break;
                    case 3:
                        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
                        listBox3.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
                        break;
                    case 4:
                        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
                        listBox4.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
                        break;
                    case 5:
                        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
                        listBox5.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
                        break;
                    case 6:
                        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
                        listBox6.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
                        break;
                    case 7:
                        xPath  =  string.Format("//*[@id=\"content\"]/div[4]/div[{0}]/div/ul/li[{1}]", i, j);
                        listBox7.Items.Add(driver.FindElement(By.XPath(xPath)).Text);
                        break;
                    default:
                        break;
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    driver.Dispose();
}

 

 

실행동작 화면

웹툰 불러오기 버튼을 누르게되면, 우측 리스트에 요일별로 웹툰을 하나씩 불러오게 됩니다.

 

 

실행해보고 싶으시면 아래 실행파일을 통해 확인가능합니다.

naverWebtoon.zip
8.21MB

 

용량때문에 소스파일만 업로드합니다.

Form1.cs
0.00MB


 

반응형

댓글