멍멍이네 블로그

초간단 설명

1. NuGet패키지에서 셀레니움 추가.

2. 사용할 웹 브라우저 드라이버를 NuGet에서 추가.

- (필자는 크롬 사용함. 검색 결과가 많음 -> 구글링에 많은 데이터가 돌아다님.)

3. 크롤링 할 페이지에 가서 F12 - DevTools에서 cs를 확인 후 자기가 접근할 데이터의 태그를 확인.

4. 접근할 데이터의 태그를 가지고 데이터 접근 및 키 입력(버튼 클릭, 아이디 혹은 검색어 입력 등)

 

 

 

 

 

 

 

** Visual Studio 2019 버전 기준 설명입니다. **

1. 프로젝트를 실행한 후 NuGet 솔루션을 켭니다.

(도구 탭 - NuGet 패키지 관리자 - 솔루션용 NuGet 패키지 관리)

 

2. NuGet 솔루션 창에서 Excel을 검색하여 현재 패키지에 추가해줍니다.

NuGet 솔루션창.

* 셀레니움 - 웹 드라이버와, 브라우저 드라이버를 설치해준다.

 

3. 셀레니움을 사용하기 위하여 using 선언.

using OpenQA.Selenium;

using Open.Selenium.Chrome;

 

var driverService = ChromeDriverService.CreateDefaultService(); // 크롬 드라이버 서비스를 기본값으로 설정.

var options = new ChromeOptions(); // 크롬 옵션 설정

 

using (IWebDriver driver = new ChromeDriver(driverService, options))  // 생성자가 많음. 정의부분 가서 확인 후 필요한 방식대로 사용하면 됨.
{

    driver.Url = "http://www.naver.com"; // 브라우저 실행. 접근 할 웹페이지의 url 입력. 

    var searchTextBox = driver.FindElement(By.XPath("접근 할 버튼 혹은 검색창의 XPath"));

}

 

* xpath 확인법.

해당 웹페이지로 접속 후 F12를 누른다.

 

 

 

우측에 생기는 DevTool에서 위쪽 Elements 탭 왼쪽으로 두칸에 있는 네모+화살표 모양을 클릭한다.(단축키 컨트롤+쉬프트+C)

버튼을 클릭한 후 Elements창에서 열리는 해당 속성 태그를 우클릭 후 Copy - Copy XPath를 클릭한다.

필요에 따라 XPath 외 다른 방식을 이용해도 된다.

By.XPath 외에도 By.ClassName이나 By.TagName 메소드도 있음.

 

.Click() 이나 .SendKeys나 .Clear() 는 셀레니움 홈페이지(?) 참조.

 

 

 

 

초간단 설명.
1. NuGet 패키지로 Excel 패키지 추가.

2. using Excel = ""; // 엑셀 파일 접근

3. path클래스로 바탕화면 혹은 실행파일 기준 경로 설정 (파일 생성은 파일 스트림 검색)

4. 해당 파일 접근 후 시트 설정

5. 데이터 read or write

 

 

 

 

** Visual Studio 2019 버전 기준 설명입니다. **

1. 프로젝트를 실행한 후 NuGet 솔루션을 켭니다.

(도구 탭 - NuGet 패키지 관리자 - 솔루션용 NuGet 패키지 관리)

 

2. NuGet 솔루션 창에서 Excel을 검색하여 현재 패키지에 추가해줍니다.

NuGet 솔루션. 이미 Excel 을 검색하여 추가한 상태.

 

 

3. Excel을 사용하기 위하여 상단에 using 선언.

using Excel = Microsoft.Office.Interop.Excel;

 

4. Excel 파일 접근 및 사용.

string path = Path.Combine("엑셀 파일 경로", "엑셀 파일명(확장자 포함)");

 

Excel.Application excelApp = new Excel.Application(); // 컴퓨터에 엑셀이 없을 경우 에러.

Excel.Workbook workBook = excelApp.Workbooks.Open(path);

Excel.Worksheet workSheet = workBook.Worksheets.get_Item(1) as Excel.Worksheet; // 엑셀 1번째 워크시트 가져오기

Excel.Range range = workSheet.UsedRange; // 사용 중인 셀 영역을 가져오기

 

string value = (string)(range.Cells[1, 1] as Excel.Range).Value2; // 오픈한 엑셀 파일의 워크시트에서 1행 1열 값을 가져온다.

 

* 반대로 저장도 가능하며, 메모리 해제를 해주지 않으면, 계속 엑셀이 실행 중임.

* 시트는 숫자로 하면 n번째 시트를 인식하며, 문자열을 통해 시트 이름을 찾을 수 있다.

* 경로는 Path클래스가 아닌 직접 string으로 입력해줘도 된다.

 

System.Net.WebExceiption : Server returned an error: 500 STOR : command not understood. at System.Net.FtpWebRequest.EndGetRequestStream(System.IAsyncResult

 

 

Unity3D에서 C#으로 FTP 방식으로 서버에 파일 업/다운로드 중 뜬 에러.

 

해당 에러는 파일 다운로드 중 생겼습니다.

원인은 파일을 읽어야되는데, 어떤 이유에서든 읽을 파일의 경로를 벗어남.

ex) path에 "/"가 들어가서 파일이 있는 위치가 아닌 다른 위치를 확인함.

(파일 이름에 시간변수를 더해서 넣었더니 01/01/20 이런식으로 날짜가 들어갔음.)

 

없는 위치의 폴더를 찾고, 그곳의 권한도 없고,,,

덕분에 온갖 에러가 떴던것 같습니다 ㅜ_ㅜ

'프로그래밍 > C#' 카테고리의 다른 글

[c# / 셀레니움] 웹크롤링  (0) 2020.12.06
[c#/Excel] 엑셀 리더  (0) 2020.12.06
[C#] 배열과 List의 차이  (0) 2016.02.03
[C/C#] C언어와 C#언어의 차이 / 기타 ++  (0) 2015.12.21
[C#] 부모클래스의 생성자 호출  (0) 2015.12.19

배열과 리스트의 가장 큰 차이는 공간이 한정적이냐 아니냐 차이.

 

16. 02. 03

가장 큰 차이는 C는 절차지향언어이고, C#은 객체지향언어이다.

 

절차지향언어란?

1.

컴퓨터에서 연산, 대입, 판단, 입출력, 실행 순서 등의 기본적인 처리를 쉽게 기술할 수 있고, 그런 실행 순서(절차)를 지정해서 프로그램을 작성하기 위한 프로그래밍 언어COBOL, FORTRAN, PL/Ⅰ 등 절차를 명확한 계산법으로서 용이하게 표현되는 문제 지향 언어. 원칙으로 쓰여질 순서에 구문 요소가 실행되는 프로그램 언어이다. 일반용 고수준 프로그래밍 언어의 대부분은 절차 중심 언어이다. 비절차 언어(non procedural language)와 대비된다.

[네이버 지식백과] 절차 지향 언어 [procedure-oriented language] (컴퓨터인터넷IT용어대사전, 2011. 1. 20., 일진사)

 

 

2. 절차 지향(구조적) 프로그래밍
절차 지향 프로그래밍은 소프트 웨어를 개발하는데 기능 또는 구조위주의 관점으로 바라보면서 원하는 기능을 하향식(폭포식,Top Down)
으로 세분화 구체화 하여 해결책을 찾아가는 개발 방법이다. ( 접근 방법 : 분할정복 )

장점은
1. 기능 단위로 수행하기 때문에 해결책을 구하기쉽다.
2. 개발 기간이 짧다.

단점
1. 요구 변환에 약하다( 유지보수 비용 증가)
2. 분석에서 설계로의 전이과정이 힘들다.
3. 잦은 변경이 불가능하고 하향식이라 한쪽을 변경하면 다른쪽에 영향을 준다.
4. 대형 프로젝트에 적합하지 않다.

 

 

객체지향언어란?

1. 객체 중심 프로그래밍을 위해 사용되는 언어로 연산문들의 집합으로 이루어진다. 객체는 자료와 프로그램추상화로써 구현되는데, 연산하고자 하는 여러 가지 객체들 속에서 그 연산들의 정의가 나타나며 동시에 객체에 대한 정의는 그들 연산의 여러 가지 측면에서 나타난다.

[네이버 지식백과] 객체 지향 언어 [object-oriented language, 客體指向言語, きゃくたいしこうげんご] (용어해설)

2. 객체 지향 프로그래밍
객체 지향 프로그래밍은 소프트 웨어를 개발하는데 데이터 위주의 관점으로 바라보면서 구체적인 데이터들간의 상호 관계를
정의함으로써 상향식(Bottom Up)으로 해결책을 찾아가는 개발 방법이다.
이러한 데이터들의 상호 관계를 위주이기 때문에 복잡한 네트워크 구조가 된다.( 접근 방법 : 상호 관계 정의 )

장점
1. 유지 보수가 용이하다.
2. 요구 사항의 변화에 쉽게 대처한다.
3. 분석과 설계단계로 전이 과정이 쉽다.
4. 대형 프로젝트에 적합하다.

단점
1. 대형 시스템의 경우 상속구조나 객체간의 상호 작용이 너무 복잡해질수 있다.
2. 서브 시스템의 정의 방법이 제대로 정립되지 않았다.

 

 

 

네이버 지식백과와 지식인 참조함.

지식인 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=187331092&qb=Y+yWuOyWtCDqsJ3ssrTsp4DtlqU=&enc=utf8&section=kin&rank=2&search_sort=0&spq=0&pid=SFQGvsoRR1sssvWmGtZsssssssG-320430&sid=qXgftZxDZlZX%2Bqc7gg7Nzw%3D%3D

 

객체지향적 프로그램은 다형성과 확장성을 추구하는 프로그래밍.

Class A{

public A(){

}

}

 

Class B : A{

public B(){

}

}

 

자식클래스에서 생성자 호출 시 부모클래스의 생성자 호출 후 자식클래스의 생성자를 호출한다.

그런데 부모클래스의 매게변수가 있는 생성자를 호출할 때 조금 달라진다

 

Java 언어에서는 생성자에서 super 키워드로 부모클래스의 생성자를 접근할 수 있지만, C#에서는 조금 다르게 해주어야 한다.

C#에서 매게변수가 있는 상속한 부모클래스의 매게변수가 있는 생성자를 호출하기 위해서는 base키워드를 사용해야됀다.

 

Class A{

public A(){

}

public A(string b){

}

}

 

Class B{

public B(){

// "A()" 생성자 호출

}

public B() : base(string b){

// A(string b) 생성자 호출.

}

}

StringBuilder를 사용하기 위해선 using System.Text; 필수!

 

출처 : http://rus1031.blog.me/220110955718

 

출처 : http://blueasa.tistory.com/1242

먼저 매번 좋은 자료 올려주시는 blueasa 님 감사합니다.

 

 

문제 발생 원인 및 해결 방법.

원인 : 1. PlayerPrefabs 을 이용하여 데이터를 저장하고자 함.

         2. 하지만 왠지모르게 데이터가 제대로 저장되지 않았음.

         3. 확인해보니 영어나 숫자는 문제가 발생하지 않았는데, 한글 저장이 제대로 안됨.

         4. PlayerPrefabs 을 이용하여 한글을 저장하게 될 경우 2자까지는 되지만, 3자 이상부턴 저장이 안됨(혹은 깨짐)현상이 발생함.

         5. 다른 저장 방법 검색 (시간이 모자름) -> 블루 아사이님 블로그를 참고해서 데이터 저장방식을 리스트로 바꿈!

 

해결 방법.

데이터 저장 클래스를 만들어서 리스트 형식으로 변수 생성 후 포멧(바이트 배열)을 바꿔서 저장함!

굳이 리스트 뿐만 아니라 일반 변수도 되긴 할 것 같지만, 리스트가 편하니 그대로 진행!

Invalid rank specifier: expected `,' or `]'

 

에러 원인. C# 2차원 배열.

string[][] a;

a = new string[1][1];

수정(해결)

a = new string[1][];

a[1] = new string[1]; //-> a[1][1];

 

 

p.s.

응용

a = new string[2][];

a[0] = new string[10];

a[1] = new string[5];

AndroidRuntime(17261): java.lang.IllegalStateException: Could not execute method of the activity ...

일반적으로 에러 문제가 단일문장으로 볼 수 없다.
유사한 에러로 http://stackoverflow.com/questions/23987997/android-java-lang-illegalstateexception-could-not-execute-method-of-the-activ
소켓을 사용하는데 메인 Thread에서 Network IO를 실행할 수 없다.
AsyncTask 혹은 Thread로 실행하라 라는건데..

나같은경우는 ...ㅋ... 매니페스트에서 엑티비티 등록을 안해줬기 때문에 생긴 에러! 매니페스트에 엑티비티 등록해주세요~