본문 바로가기

DEV/C#

크롤링으로 나라장터 검색-입찰공고 조회

반응형

 입찰공고 조회


입찰공고 조회 화면입니다.
주소 : http://www.g2b.go.kr:8101/ep/tbid/tbidFwd.do

검색조건
공고명 : 인자로 처리
업무종류 : 용역
기간 : 최근1개월
입찰마감건 제외
검색건수 표시 체크
목록수 : 100개

위 조건으로 검색하도록 코드를 구현해 보겠습니다.


조회 코드

public void GetAnncmInfo(string word)
{
	try
	{
		string searchWord = word;

		_driver = new ChromeDriver(_driverService, _options);

		//웹사이트 이동
		_driver.Navigate().GoToUrl(anncmUrl);

		//용역만 선택
		var checkbox = _driver.FindElementById("taskClCds5");
		checkbox.Click();

		//id값이 bidNm인 태그 가져오기
		IWebElement bidNm = _driver.FindElementById("bidNm");
		//내용을 삭제 (버릇처럼 사용할 것!)
		bidNm.Clear();
		//검색어 입력후 엔터
		bidNm.SendKeys(searchWord);
		bidNm.SendKeys(OpenQA.Selenium.Keys.Return);

		//최근 1개월 선택
		var checkboxDate = _driver.FindElementById("setMonth1_1");
		checkboxDate.Click();

		//입찰마감건 제외
		var checkboxExcept = _driver.FindElementById("exceptEnd");
		checkboxExcept.Click();

		//검색건수표시
		var checkboxTotal = _driver.FindElementById("useTotalCount");
		checkboxTotal.Click();

		//목록수 100건 선택 (드롭다운)
		var recordcountperpage = _driver.FindElementByName("recordCountPerPage");
		SelectElement selector = new SelectElement(recordcountperpage);
		selector.SelectByValue("100");

		//검색 버튼 클릭
		IWebElement searchBtn = _driver.FindElementByClassName("btn_mdl");
		searchBtn.Click();

		//검색결과 확인(확인 필요)
		IWebElement elem = _driver.FindElementByClassName("results");
		var div_list = elem.FindElements(By.TagName("div"));

		//검색결과 조회수
		IWebElement totalCnt = _driver.FindElementByClassName("inforight");
		string cntStr = totalCnt.Text.Replace("[검색건수 :", "");
		cntStr = cntStr.Replace("건]", "");

		textBoxLog.Text += "조회된 건수는 " + cntStr + " 건 입니다.\r\n";
		
		if (div_list.Count() > 0)
		{
			string tmpStr = "";

			//검색결과 리스트로 저장
			foreach (var div in div_list)
			{
				textBoxLog.Text += div.Text + "\r\n";
				tmpStr += div.Text + "\r\n";
			}
		}

	}
	catch (Exception ex)
	{
		textBoxLog.Text += ex.ToString();
	}
	finally
	{
		_driver.Quit();
	}
}

위 코드에서 기관만 제외한다던지 참가제한을 건다던지 추가적으로 조회 조건이 필요할 경우 
Id, Name, 또는 classname 등으로 객채를 찾아 추가하여 사용하시면 됩니다.

 참고

화면의 Selectbox 제어에 대해 참고사항을 알려 드립니다.

'도구 > Nuget 패캐지 관리자 > 솔루션용 Nuget 패키지 관리' 로 이동합니다.

Nuget 패키지 관리로 이동


webdriver 또는 Selenium.Support 로 검색하여 3.1 이상 안정적인 최신 버전을 설치합니다.

Selenium.Support 설치

using OpenQA.Selenium.Support.UI;


//목록수 100건 선택 (드롭다운)
var recordcountperpage = _driver.FindElementByName("recordCountPerPage");
SelectElement selector = new SelectElement(recordcountperpage);
selector.SelectByValue("100");

설치 이후 SelectElement를 통해 selectbox를 컨트롤 할 수 있습니다.

SelectByValue : 실제값으로 선택
SelectByIndex : 셀렉트박스 순서로 선택
SelectByText : 표시되는 문자열로 선택




이전 글 보기

1. 2021.07.27 - [DEV/C#] - 크롤링으로 나라장터 검색-개요

2. 2021.07.27 - [DEV/C#] - 크롤링으로 나라장터 검색-개발환경 구축

3. 2021.08.04 - [DEV/C#] - 크롤링으로 나라장터 검색-화면 구성 및 사전규격





반응형
댓글