반응형

 

 

파이썬 셀레니움을 이용해 자동으로 크롬 창을 열어 특정 HTML 요소에 접근해보는 포스팅을 따라해봄

 

 

 

글의 목차

 

1. 파이썬 셀레니움을 이용하는 간단한 테스트를 위한 준비물

2. 파이썬과 셀레니움을 이용한 자동화 테스트를 진행하는 방법

  1) HTML DOM 객체 접근

  2) 윈도우와 프레임 접근

  3) 테스트하기 이상적인 시간

  4) 셀레니움과 파이썬 유닛 테스트 연동

3. 파이썬 셀레니움의 한계

  1) 정리

 

 

※ 기초 예제 1에서는 목차 1,2만 다루고 2-1부터 3-1까지는 기초 예제 2에서 다룰 예정

 

 

 

1. 파이썬 셀레니움을 이용하는 간단한 테스트를 위한 준비물

pip install selenium

cmd 창에서 위의 명령어를 입력하여 selenium을 설치해준다

 

 

+셀레니움을 사용하기 위해서는 추가적으로 드라이버 설치가 필요하다

 

아래 링크에서 본인이 사용할 블라우저의 드라이버를 선택해서 설치하자

ChromeEdgeFirefox, and Safari

 

(만약 드라이버 실행 후 아래와 같은 문구가 나온다면 다른 버전의 크롬 드라이버가 필요한 것이니 당황하지 말고

본인이 사용하는 크롬 버전을 확인 후, 그에 맞는 버전의 드라이버를 추가해서 exe 파일을 교체해주면 된다)

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 94
Current browser version is 96.0.4664.93 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

 

 

로컬에서 셀레니움을 테스트한다면, 위의 과정만 진행해도 괜찮다

하지만 원격에서 셀레니움을 테스트하려고 한다면, 셀레니움 서버를 추가적으로 설치해줘야 한다

셀레니움 서버는 자바로 쓰여졌으므로 JRE1.6 또는 그 이상의 버전이 서버에 설치되어있어야 한다

 

다운로드는 아래 링크를 방문 ㄱㄱ

Selenium’s download page.

 


 

 

2. 파이썬과 셀레니움을 이용한 자동화 테스트를 진행하는 방법 (1-6)

1의 단계를 마쳤으면 파이썬 셀레니움 테스트를 진행할 준비가 끝났으니 아래의 단계를 진행해보자

 

 

1. Web driver와 Key 클래스 추가

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

webdriver 클래스는 브라우저에 접근이 가능하도록 해주고

Keys 클래스는 Shift 등을 포함한 키보드 입력을 도와준다

 

 

2. 이전에 설치한 브라우저 웹 드라이버 (크롬 드라이버)의 경로 생성

driver = webdriver.Chrome('./chromedriver')

로컬 환경에서 테스트한다면, 이 명령어는 로컬에서 크롬을 실행시키는 것과 같아서

close() 메소드를 사용할때까지 닫히지않는다

 

 

3. get() 메소드를 사용하여 웹사이트를 로드

driver.get("https://www.python.org")

 

 

4. 입력한 페이지 로드가 완료됐다면 .title 속성을 사용하여 웹페이지 제목 텍스트를 출력해볼수있다

print(driver.title)

파이썬 인터프리터에서 직접 실행해보면 이렇게 출력이됨

 

셀레니움으로 브라우저 창을 띄우면 자동화된 테스트 소프트웨어에 의해 제어되고 있다는 문구도 확인이 가능하다

 

 

5. 검색창에 접근해보자

f12를 눌러 HTML 엘레먼트 리스트에서 검색어 입력을 받는 DOM을 찾아 특정 값을 입력해준다

CSS 클래스, ID, name 등의 속성을 이용하여 DOM 접근이 가능하다

 

find_element_by_name() 메소드를 이용하면 된다

search_bar = driver.find_element_by_name("q")

파이썬 인터프리터에서 직접 실행하는 경우, 위와같은 워닝창이 뜨는데

 

 

한번 더 입력했더니 그냥 수용해줘서 그냥 썼음

 

 

 

6. DOM 엘레먼트 선택을 하고 clear() 메소드를 사용하여 기존에 있던 검색 창의 값을 초기화 시켜준다

그러고 전달하고 싶은 값을 send_keys() 메소드를 사용하여 입력해준다

search_bar.clear()
search_bar.send_keys("getting started with python")

search_bar.send_keys(Keys.RETURN)
#search_bar.send_keys(Keys.ENTER) - 이 방식도 위와 동일하게 작용

Keys.RETURN을 주어 엔터 입력과 동일하게 사용

 

 

 

위의 과정을 거치는 동안 셀레니움을 통해 열었던 크롬 창의 url 이 바뀌어 있는것을 알수있다

 

print(driver.current_url)

 

print를 통해 url을 출력해보면 아래와 같이 나온다

 

'https://www.python.org/search/?q=getting+started+with+python&submit='

 

close() 메소드를 이용하여 열었던 크롬 창을 닫을수있다

driver.close()

 

 

 

위의 코드를 취합해본 코드

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome('./chromedriver')
driver.get("https://www.python.org")
print(driver.title)
search_bar = driver.find_element_by_name("q")
search_bar.clear()
search_bar.send_keys("getting started with python")
search_bar.send_keys(Keys.RETURN)
print(driver.current_url)
driver.close()

 

셀레니움을 이용한 웹 크롤링의 기본을 다뤄보았다

 

 

 

참고 : https://www.browserstack.com/guide/python-selenium-to-run-web-automation-test

 

Selenium with Python : Getting Started with Automation | BrowserStack

Learn to use Selenium Python to run web automation tests with ease. Read this step-by-step tutorial on how to run your first test using Selenium & Python.

www.browserstack.com

 

 

https://stackoverflow.com/questions/1629053/typing-the-enter-return-key-in-selenium

 

Typing the Enter/Return key in Selenium

I'm looking for a quick way to type the Enter or Return key in Selenium. Unfortunately, the form I'm trying to test (not my own code, so I can't modify) doesn't have a Submit button. When working w...

stackoverflow.com

 

반응형
반응형

 

 

bs4 예제를 따라해보면서 마주친 오류들 기록

 

 

 

TypeError: can only concatenate str (not "Tag") to str

 

TypeError: can only concatenate str (not "list") to str

 

TypeError: can only concatenate str (not "ResultSet") to str

 

 

사용 코드

from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>

<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

soup = BeautifulSoup(html_doc)


print("p : " + soup.p)

 

 

스택오버플로우 답변들을 참고해보니 파이썬에서 print 메서드string 타입만 +를 사용한 출력이 가능하고

그 외의 사용법은 모두 콤마를 사용하여 출력해야 오류가 없는것같다

 

그래서 위의 타입에러가 발생한 이유는 태그나 리스트, ResultSet 타입을 형변환없이

바로 출력했기 때문

 

 

따라서 위의 마지막 print 문을 다음과 같이 수정하면 오류가 발생하지 않는다

 

print("p : " + str(soup.p))

//Or

print("p : ",soup.p)

 

 

+번외

print("p : " + str(soup.p))
# p : <p class="title"><b>The Dormouse's story</b></p>

print("p : ",soup.a , "q")
# p :  <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a> q

print("p : "+str(soup.a) + "q")
# p : <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>q

print("p : ",soup.a, "q")
# p :  <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a> q

print("p : ",soup.a, " q")
# p :  <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>  q

print("p : "+str(soup.a) + " q")
# p : <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a> q

print에 띄어쓰기가 어떻게 출력되는지 궁금해서 테스트해봄

 

 

 

 

참고 : https://stackoverflow.com/questions/60491093/python-scraping-problem-typeerror-can-only-concatenate-str-not-resultset-t

 

Python scraping problem "TypeError: can only concatenate str (not "ResultSet") to str"

I am fresh noobster who tries to learn python as well as use it for webscraping. So I watched a few videos to learn the basics on youtube, followed the tutorial, however I cannot figure it out why my

stackoverflow.com

 

반응형
반응형

 

 

 

파이썬 초보가 뚝딱뚝딱해보다 맞닥뜨린 오류

 

TypeError: write() argument must be str, not BeautifulSoup

문장만 읽어도 뭔가의 자료형 문제인가보다 싶어서 저 문제를 해결한 사람들의 답변을 따라해봄

 

print( str(bs4에서 가져온내용) )

 

이렇게 str으로 기존 출력 내용을 감싸서 출력을 했는데 이제는

 

'cp949' codec can't encode character '\xa0' in position 144794: illegal multibyte sequence

이런 오류로 진화했다

 

오류에 언급되어 있는것처럼,

출력 시 인코딩 문제인듯 싶어서 utf-8 인코딩 방식을 추가해준 방법을 따라해봤다

 

f = open("F:/kotraTest.txt",'wb')
f.write(soup.encode('utf-8'))
f.close()

또는

f = open("F:/kotraTest.txt",'w',encoding='utf-8')
f.write(str(soup))
f.close()

이렇게 되면 문제가 해결된다

 

 

 

이 방법들로 웹페이지 내용을 텍스트파일로 저장할 수 있었는데,

두가지 방법의 차이점이 문득 궁금해져서 각각의 방식으로 저장한 파일을 열어 라인 바이 라인으로 비교해봄

 

결과 값의 차이는 바이트 방식으로 파일을 저장한 두번째 방법이 enter가 한번씩 쳐져

좀더 간결한 텍스트 파일로 저장이 가능하다는 거였다

 

 

+추가로 파라미터로 사용한 wb에 대해 찾아봤더니

w는 read, write에서의 파일에 새로운 내용을 작성하거나 변경하는 등의 쓰기 기능을 수행할 때 사용하며

b는 이진파일인 binary file을 write 할때 지정해주어야 한다 함

 

대충 윈도우에서의 파이썬은 텍스트와 바이너리 파일을 구분 짓기위해 데이터를 읽거나 쓸 때,

자동으로 파일의 마지막 부분에 변화를 준다고 함

 

Binary files (이진 파일)이란,

사람이 읽을 수 없는 문자들로 이루어진 모든 파일들을 의미한다

 

JPEG, GIF 들과같은 이미지파일 일수도있고, MP3, PDF나 워드 파일과 같이 이진 문서 형식일 수 도있다

 

파이썬에서는 기본적으로 텍스트모드로 파일들을 오픈하며

바이너리 모드같이 특정 모드에서 파일을 사용하기 위해서는, wb와 같이 'b 문자'를 붙여 사용해야한다

 

 

 

 

결국 찾아본 내용을 합해보면 wb에서 b는 바이너리 모드에서 파일을 쓰기 모드로 사용한 것인데

나는 텍스트파일에 저장을 한것이므로 나의 방식에서는 w만으로 충분한듯

 

 

반응형
반응형

 

 

 

새로 python 3.10을 설치하려다가 3.9.9를 설치해본 후기

 

목차

1. 파이썬 3.10 윈도우 설치

2. 파이썬 환경변수 세팅

3. 1의 설치가 제대로 되어있지 않은 경우, 다른 방법으로 설치

 

 

 

 

 

먼저 PC에 설치된 Python이 있는지 확인을 해봤다

python --version

보통 python --version을 입력하면 설치된 파이썬 버전이 출력되어야하는데

그냥 Python만 있어서 pip install 명령어를 사용해봤더니 설치가 안되어있다고 함

 

그래서 새롭게 설치를 해봤음

 

 

 

1. python 설치

 

구글에 python 검색 하면 나오는 사이트 ㄱㄱ

 

 

Download Python

The official home of the Python Programming Language

www.python.org

 

 

 

 

 

 

 

Disable path length limit 는 처음보는 문구라서 찾아봤더니

 

 

윈도우에서 Path의 길이 글자를 제한하는 기능이 있는데, 이 때 python 설치한 경로가 긴 경우

문제가 발생할 수 있어 python에서 자체적으로 이걸 막아주는 듯

 

3.6버전 이상부터 가능하다 함

 

 

 

 

2. Python 환경변수 설정

 

먼저 cmd를 열고 where python을 이용하여 python 위치를 찾는다

미리 복사해두면 다음 과정에 편리하니

마우스로 영역을 선택한 다음 ctrl+c ㄱㄱ

 

내 PC를 우클릭하여 속성을 누른 다음

 

나온 화면의 우측에서 고급 시스템 설정을 눌러준다

 

(※ 이 방식은 제어판에서도 접근이 가능함)

 

 

시스템 속성의 고급탭에서 아래에 있는 환경변수를 클릭한다

 

 

 

위쪽 창에 있는 사용자 변수 아래의 새로만들기를 클릭한다

 

우측의 새로만들기 또는 왼쪽 화면의 빈칸을 더블클릭하여 where로 얻은 파이썬의 설치경로를 입력해준다

아까 복사해둔 주소를 ctrl v 해주면 됨

 

C:\Users\UserName\AppData\Local\Microsoft\WindowsApps\python.exe

나의 경우 위의 주소로 나와서 뒤의 python.exe를 제외한 폴더 경로를 입력해주었다

 

C:\Users\UserName\AppData\Local\Microsoft\WindowsApps

이렇게

 

 

 

아래의 확인을 누르고

 

 

다시 확인을 눌러 환경변수 설정을 마친다

 

 

환경 변수 설정이 잘 되었는지 확인하기 위해서는

cmd에서 python을 실행해보는게 제일 편리하다

 

python 입력 후 위의 화면처럼 바뀐다면 환경변수 세팅이 완료된 것임

 

 

 

 

 

만약 위의 방식으로 파이썬 설치가 완료되지 않는 사람은 아래를 참고하자

 

3. 다른 방법으로 python 설치하기

 

 

윈도우 키를 누르고 Microsoft Store를 입력하여 Python 3.9를 찾아준다

 

 

받기, 설치를 눌러 다운로드 해주면 끝

 

환경변수는 위의 방법과 동일하다

 

python.org에서 받은 파일로 설치를 했는데 문제가 생겼는지 실행이 안돼서

나는 스토어에 들어가서 다운받았다

 

현재는 파이썬 작동이 잘 되니 큰 문제 없어 다행임

 

 

반응형
반응형

 

 

파이썬을 다시 사용해보려던 차에 버전이랑 설치 경로를 까먹어서 찾아본 김에 적어봄

 

 

1. 설치한 파이썬 버전 확인하는 법

1) cmd에서 파이썬 버전을 확인하는 법

C:\Users\Username>python --version

 

cmd 창 입력 예시

 

2) python 인터프리터에서 버전 확인하는 법

C:\Users\Username>python
import sys
print(sys.version)

cmd에 python을 입력하면 파이썬 인터프리터로 넘어감

 

파이썬 인터프리터 입력 예시

 

위의 2가지 방법으로 내가 설치한 파이썬 버전3.8.2인것을 알수있다

 

 

2. 파이썬 설치된 경로 확인하는 법

 

 

1) cmd에서 파이썬 설치 경로를 확인하는 법

C:\Users\Username\where python

 

cmd에서 입력 예시

 

2) python 인터프리터에서 설치 경로를 확인하는 법

C:\Users\Username>python
import os
import sys
os.path.dirname(sys.executable)

 

python interpreter 입력 예시

 

 

 

 

 

출처 : 스택오버플로우

 

How can I find where Python is installed on Windows?

I want to find out my Python installation path on Windows. For example: C:\Python25 How can I find where Python is installed?

stackoverflow.com

 

 

 

Which version of Python do I have installed?

I have to run a Python script on a Windows server. How can I know which version of Python I have, and does it even really matter? I was thinking of updating to the latest version of Python.

stackoverflow.com

 

 

 

How do I check what version of Python is running my script?

How can I check what version of the Python Interpreter is interpreting my script?

stackoverflow.com

 

 

※오타가 있을 수 있으니 그런 경우 이미지를 참고해주시길 바랍니다.

반응형

+ Recent posts