반응형
SMALL

복습 : 한국전력공사 용어사전에서 검색 후 텍스트 출력하기

0. Main.xaml > Flowchart 생성 > Sequence 생성

1. 브라우저 열기 : (Assign 변수선언) - Open Browser - [ Maximize Window - Delay ]

크롬 설정 빼먹지 말고 할 것!

보통 URL이나 아이디/비밀번호 입력하는 것들은 변수처리 해놓는게 맞다!

브라우저 열기

2. 카테고리 클릭 : Attach Browser - [ Click ] - Delay

한국전력공사(main page) > [지식센터] > [전력용어] > [KEPCO 용어사전]

3. 선택박스 고르기 : Click(선택박스) - Select item - 원하는 것 선택

4. 텍스트 입력 후 검색 : Type Into - [ 변수선언value 값 입력 ] - Click

변수 선언 shift + k

5. 텍스트 가져오기 : Click - Get Text(가져오고) - Write Line(출력)

가져올 내용을 변수선언 후 담아서 출력했다.


브라우저 액티비티

1. 브라우저 이동하기 : Navigate to

해당 사이트로 이동합니다. 빈칸에 웹페이지 주소를 적습니다.

2. 탭 닫기 : Close Tab

브라우저를 닫는다. 이동과 닫는 것은 함께 쓸 수 없다. 다른 attach로 해야한다.

자동으로 이동하고 꺼진다.


스크린 스크랩핑

- 미리보기 기능을 지원하지만 write Line은 불가

- 리본메뉴를 쓰면 자동으로 Attach Browser가 생성된다. -> 따로 안써도 됨

- 스크림 스크랩핑의 메서드

  • Native : 원본 모양 그대로(줄바꿈 포함)
  • Full Text (=Get Text 와 기능동일) : 텍스트 전부, 필요없는 텍스트까지
  • OCR -> 이미지 글자 추출

스크래핑 메소드
스크래핑 메소드 종류

- 스크래핑을 할 때에 고려할 점

  1. 공백은 어떻게 하는지?
  2. 이미지만 가져올껀지
  3. 텍스트만 추출할건지? -> Full text는 여러 요소가 섞여있기 때문.

- 단, 숨겨진 항목 무시하기 누르면 아래 텍스트는 생략

- Full text는 key값이 함께 와서 키-값 매칭해서 가져오기 편하다.

- 개발자들은 이 이후 진행할 '데이터 가공' 단계에 어떠한 데이터가 필요할지 판단 후 가져온다.

 

1. 원하는 영역 선택 : 리본메뉴 - 스크린 스크래핑 - 원하는 영역 선택

이부분을 스크래핑 해볼 것이다.
글씨만 잘 추출되었다.

Native로 받아오자. 글씨가 공백 없이 깔끔하게 받아와진다.

native로 받아온 것

2. 텍스트 출력 : write Line

가져온 Text 이름이 Div로 되어있으므로 그대로 출력해주자
잘 출력되었다.


[ 에러 ] RemoteException wrapping System.Runtime.InteropServices.COMException 메시지 : 캡처 오류입니다. 

에러 화면

스크린 스크래핑은 보이는 화면에서 그 위치를 그대로 가져온다.

따라서 실행시킬 때 스크래핑 하는 스크린을 띄워놔야한다.

에러가 난 이유는 스크래핑 창이 아닌 다른 탭을 띄워놨기 때문이다.



형변환

해당 데이터의 타입을 바꿔주는 것. 우리가 받아온 데이터의 비교 및 연산을 하기 위해서 사용된다. 연산을 위해서는 기본적으로 숫자여야 한다. 따라서 형변환이 필요하다.

+ 보통 데이터를 추출하면 Generic value 형식으로 뽑힌다. (Generic value : 모든 데이터를 다 포함하는 상위 형식)

ex) 스크린 스크래핑, get text로 받아온 String 등

++ 현장에서 count 쓸 때에는 int를 쓰지만 보통 Double를 쓴다. 모든 숫자는 대부분 Double로 설정하자. int32보다 Double이 범위가 훨씬 크다.

+++형변환 사용 예시 : 재무,회계,인사(HR) 관련 프로젝트를 진행할 때 (= 돈관련) 이때는 형변환을 반드시 사용한다.

 

text 형변환은 이미 배웠다. : .ToString 을 사용하면 text를 형변환 한다. 텍스트 가공(뒤에 나올 String 메소드 사용) 시에 사용한다.

숫자를 형변환 할 때는 cdbl(generic ~~) 을 사용한다. 연산을 위해 사용된다.

 

1. 브라우저에서 환율 긁어오기 : Attach Browser - [ Get text - Write Line - If ]

환율을 긁어왔지만 이건 String으로 가져온 것이다. 따라서 비교연산자를 사용하기 위해 cdbl(변수명) 을 사용한다.

String을 cdbl로 숫자형으로 바꿔준다.


파일 디렉토리

원래 it에는 디렉토리라는 함수가 있다. System.IO 라는 함수들이 있는데, 파일, 폴더 등을 관리를 해주는 함수디렉토리라고 한다. 

예를 들면 폴더에서 폴더(또는 파일)를 이동할 때에는 \(역슬래쉬)를 사용한다. 그리고 파일은 뒤에는 항상 확장자명이 함께 붙는다. 디렉토리는 항상 파일확장자명을 가지고 있다. 

현재 우리가 가지고 있는 파일의 경로는 다음과 같다.

"C:\RPA_Guidebook\Session5_UI 데이터 추출하기\Result\Expert.xlsx"

이러한 경로를 Full Path, 전체경로라고 한다. 항상 뭔가를 실행할때는 전체 경로 뒤에 파일과 파일 확장자까지 붙여서 (전체 경로를 써서) 실행한다.  윈도우에서는 파일 다운로드 하거나, 복사 등등을 많이 쓴다. 그때 Full Path를 많이 사용한다.

이런식으로 전체경로를 이용해서 파일을 저장한다.

[주의] 파일 저장 위치 확인

파일 다운로드 받을 때 각 파일의 저장 위치를 지정해주는 것이 중요하다. 항상 다운로드 폴더에 저장 크롬에서 설정 > 고급에서 체킹 꼭 해준다. 현장에 나가서도 꼭 바꿔줘야한다.

이래야 경로를 클릭클릭 안해도 알아서 그 위치에 저장됨


[ 파일 확장자명 총정리 ]

1. 엑셀 : .xlsx(기본) .xls

2. 파워포인트 : .pptx

3. 워드 : .doc /.docs

4. PDF : .pdf

5. 텍스트파일 : .txt

6. csv 파일 : .csv

7. zip 파일 : .zip

8. 그림 파일 : .jpg / .png


+ 과제 157p

여기까지 데이터 추출 단계 끝


참고 꿀팁

1. target 속성

target 옆에 +를 누르면 Timeout를 설정할 수 있다.

selector는 xml 의 필요한 부분을 가져온 것.

NextLinkSelector는 다음페이지 넘어가는 버튼 표시해주는 것.

timeout 설정하면 시간을 줄일 수 있다. nextLinkSelector까지 기다려주는 것.

2. 실행키 : window + r 

3. 파란색 느낌표 : 에러표시

느낌표가 떠서 에러가 나면 가장 아래꺼 보면 뭐가 문제인지 알 수 있다. 가장 아래 있는 파란 느낌표가 원인데이터이므로 거기를 살펴보자.

4. 배열과 컬렉션

배열은 크기선언이 필수 -> 크기 선언 후 assign을 해서 값을 넣어줌

컬렉션 타입의 list의 경우 자동으로 카운트 되며 assign이 아닌 Add to Collection을 사용한다.

둘다 For Each를 사용해서 한다.

변수선언 : list
변수선언 시 String 설정을 해줘야한다.


셀렉터(Selector)

UI 속성값을 저장한 표준 XML 코드. 현재 표시한 화면에 대한 정보를 표시한 것이다.

네이버 금융에서 버튼을 누르는 시퀀스의 selector

여기서 강조표시를 누르면,

이런식으로 나타내고 있는 화면을 강조표시 해준다.

Selector는 에러메시지 확인할 때 유용하다.

1. 사이트의 화면이 변경되었을 경우

2. 사이트 자체가 없어졌을 경우

3. 창 크기가 달라 인식을 못할 경우

이렇게 ui가 변경되거나 없어진 경우 Selector를 이용하면 확인할 수 있다.

유효성 검사 상태

유효성 검사 상태

유효성 검사는 각 색깔별로 UI의 상태를 확인할 수 있다.

  • 초록 : 해당 UI가 화면에 있다.
  • 노랑 : 아직 실행이 되지 않았거나 아직 알 수 없는 상태. 눌러보면 초록인지 빨강인지 알 수 있다.
  • 빨강 : 해당 UI가 화면에 없다.

 

와일드카드(*)

메모장을 틀어놓고 자동으로 입력되는 간단한 시퀀스를 만든다.

자동으로 Hello RPA가 입력된다.

이때 Selector를 살펴보면 다음과 같다.

attach window의 selector

이제 이미 실행한 시퀀스를 한번더, 총 두 번 실행한다.

에러 발생

에러가 난다. 왜?

메모장을 살펴보자.

이름이 바뀌었다. * 표시가 붙는다.(수정되고 있음을 표시) 아까 attach Window로 지정한 창이 아니게 된 것.

즉, 제목이 달라서 에러가 남.

이름에 수정중인 표시가 붙는다.

 

이럴 때 와일드카드가 사용된다.


[ 와일드카드 ]

하나 또는 둘 이상의 문자를 대체하는 기호. 주로 Selector에서 속성을 변경할 때 사용된다.

? : 문자 1개를 대체한다.

* : 0개 이상의 문자를 대체한다.

즉, 자주 변경되는 UI(이름, 날짜 등이 포함된 제목)에 대해 에러가 발생하지 않도록 처리해준다.


와일드카드를 이용해서 Selector의 제목을 변경해주어서 에러를 없애보자.

이부분을 전부 와일드카드로 대체해주자.

 

다시한번 실행해보면,

잘 입력된다.

->수정을 뜻하는 * 표시랑 다른거다.

언제 와일드카드를 쓸까?

공통모듈(프로세스)를 만들 때 사용한다.

  • 사이트 검색창에 검색어를 입력하는 프로세스
  • 사이트 이동하는 프로세스(Navigate to)

와일드카드는 attach browser 또는 attach windowtitle 또는 name 태그를 수정할 때 쓰인다.

반응형
LIST
반응형
SMALL

Selenium이란?

WebBrowser(Chrome, Firefox, IE, Safari 등등)를 조작해주는 프레임워크(Framework).

일반적으로 웹 앱을 테스트할 때 주로 사용하는 프레임워크이다.

 

webdriver(조작을 원하는 browser별로 실제 파일이 다름)라는 API를 이용해 브라우저를 제어할 수 있다. 브라우저를 직접 동작시킨다는 것은 JavaScript가 동작하면서 비동기적으로 서버로부터 콘텐츠를 가져오거나 숨겨져 있는 콘텐츠를 열거나 하는 등의 작업을 수행함을 의미한다. webdriver는 http프로토콜로 명령을 직접 날리고 확인 할 수 있다.

 

Selenium 라이브러리에는 브라우저 조작이 가능한 다양한 기능이 존재하며, JS로 렌더링이 완료된 후의 DOM결과물에 접근이 가능하다. 우리가 requests에서 사용했던 .text의 경우 브라우저에서 '소스보기'를 한 것과 같이 동작하여, JS등을 통해 동적으로 DOM이 변화한 이후의 HTML을 보여주지 않기 때문에 Selenium은 JavaScript에 의해 동적으로 생성되는 사이트의 데이터를 크롤링할 때 매우 유용하게 사용되는 스크래핑 도구이다.


설치방법(Python기준)

 

1. 현재 설치된 패키지 정보들을 보자. 파이어폭스 찾아봐!


  
sudo apt --installed list | grep firefox

 

 

2. 셀레니움 설치


  
pip install selenium

 

 

3. 현재 환경설정

현재 파이참 개발은 myapps라는 환경에서 하고 있으므로 이동.

주피터를 위해 base에도 설치해주고, myapps에서 한번 셀레니움을 더 설치해준다.


  
conda activate myapps

myapps에도 설치

 

4. 설치하고 tar 파일 압축 풀기


  
wget https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz
tar xvzf geckodriver-v0.26.0-linux64.tar.gz

압축풀림

 

5. 파일 경로 이동


  
sudo mv geckodriver /usr/local/bin/

 

 

6. testdaum.py 파일을 생성한다.

다음 계정으로 로그인 하는 실험을 해보도록 하자.

user와 pass에 다음 계정 아이디와 비밀번호를 넣고 로그인해보자.


  
from selenium.webdriver import Firefox, FirefoxOptions
USER = ""
PASS = ""
# Firefox 실행하기
browser = Firefox()
# 로그인 페이지에 접근하기
url_login = "https://accounts.kakao.com/login?continue=https%3A%2F%2Flogins.daum.net%2Faccounts%2Fksso.do%3Frescue" \
"%3Dtrue%26url%3Dhttps%253A%252F%252Fwww.daum.net%252F "
browser.get(url_login)
print("로그인페이지에 접근합니다")
# 텍스트 박스에 아이디와 비밀번호 입력하기
e = browser.find_element_by_id("id_email_2")
e.clear()
e.send_keys(USER)
e = browser.find_element_by_id("id_password_3")
e.clear()
e.send_keys(PASS)
# 입력양식 전송해서 로그인하기 -find_element_by_css_selector("")
form = browser.find_element_by_css_selector("button.btn_g.btn_confirm.submit")
# form.submit()
form.click()
print("로그인버튼 클릭")
browser.implicitly_wait(3)
browser.get("http://www.naver.com")
# browser.quit()

 

7. 결과

알아서 입력한 아이디 비밀번호가 입력되고 로그인버튼이 눌러진다.

앗... 카카오로 통합되었더니 로봇 인증을 해야해서ㅠ로그인이 되지는 않는다.

하지만 제어는 성공적!

네이버는 보안이 철저해서 다음으로 했으나ㅠ로봇 인증때문에 더 어렵게 되었다ㅠ

 

8. 스크린샷 및 종료

브라우저를 스크린샷을 찍어서 저장할 수도 있다. 꼭 브라우저 꺼주고 나가야 과부하가 생기지 않는다.


  
browser.save_screenshot("result.png")
browser.quit()

 

 



[ 주피터 노트북 : 웹스크래핑으로 이미지 다운로드하기 ]


 

1. url을 입력해서 화면 캡처하고 저장하기

네이버 홈페이지를 캡처하고 저장해보자.

headless로 하게되면 상단의 메뉴바가 없이 캡쳐된다.

폴더에 저장되었다.
저장된 사진

 

▼ 전체 코드

더보기


  
from selenium.webdriver import Firefox, FirefoxOptions
# 파이어 폭스를 헤드리스 모드로 설정하는 옵션(Headless:창이 없는)
options = FirefoxOptions()
# url 설정
url = "http://www.naver.com"
# 입력받을 인자값 등록
options.add_argument('--headless')
# 파이어폭스 드라이버 추출
browser = Firefox(options=options)
# url 읽어들이기
browser.get(url)
#화면을 캡쳐해서 저장하기
browser.save_screenshot("Website.png")
#종료
browser.quit()

 

 

 

2. 인스타그램에서 강아지 사진 가져오기

1) 게시물 갯수를 크롤링해보자.

F12 눌러서 class이름 가져오기
클래스 이름
클래스 이름을 입력해서 해당 태그를 가져온다.

▼ 전체 코드

더보기


  
from selenium.webdriver import Firefox, FirefoxOptions
import time
#헤드리스모드
options = FirefoxOptions()
options.add_argument('--headless')
#드라이버 추출
browser = Firefox(options=options)
#주소 설정
url = "https://www.instagram.com/explore/tags/%EA%B0%95%EC%95%84%EC%A7%80/"
# url 읽어들이기
browser.get(url)
# 옵션 설정하기
time.sleep(3)
#총 이미지 갯수를 띄우는 텍스트의 클래스 이름 입력
total_cnt = browser.find_element_by_class_name('g47SY').text
print('총 검색된 강아지 이미지 수 : ', total_cnt)

 

 

2) 강아지 사진 저장

주피터 workspace에 downImg > dog 경로로 사진을 저장할 폴더를 생성해주었다. 

F12 눌러서 링크 확인
클래스 이름 확인
이미지 다운로드
이미지가 잘 저장되었다.

 

▼ 전체 코드

더보기


  
# 이미지 읽어서 저장하기
imgs = browser.find_elements_by_css_selector('img.FFVAD')
#이미지 가져오기
result = []
for img in imgs:
if 'http' in img.get_attribute('src'):
result.append(img.get_attribute('src'))
from urllib.request import urlretrieve
# 디운로드
for index,link in enumerate(result):
print(index, ":",link)
urlretrieve(link, 'downImg/dog/dog_'+str(index)+'.jpg')
print('success!')

 


3. [과제]구글에서 입력한 동물 이미지를 수집해서 자동으로 저장하는 프로그램 개발하기


 

반응형
LIST
반응형
SMALL

+ Recent posts

반응형
LIST