반응형
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();
}
실행동작 화면
웹툰 불러오기 버튼을 누르게되면, 우측 리스트에 요일별로 웹툰을 하나씩 불러오게 됩니다.
실행해보고 싶으시면 아래 실행파일을 통해 확인가능합니다.
용량때문에 소스파일만 업로드합니다.
반응형
'훈, IT 공부 > C#' 카테고리의 다른 글
C#, 셀레니움(selenium) XPath contains() 함수 활용하기 (2) | 2022.10.13 |
---|---|
C# 외부 프로그램 .exe 실행하기 (6) | 2022.10.06 |
댓글