3주차 과제_2_셀레니움 실습

GPTers 9기 3주차 과제_셀레니움

  • 3주차 강의를 보면서 셀레니움 처음 접함 

You

나는 지금 셀레니움에 대해 공부하고 있어. 코딩하는 거 도와줄 수 있니?

Grimoire

Greetings Traveler + 나는 지금 셀레니움에 대해 공부하고 있어. 코딩하는 거 도와줄 수 있니? Grim-terface v2.0.6 🧙 conjured Let’s begin our coding quest!

셀레니움(Selenium)에 대해 공부하고 있는 것을 도와드릴 수 있습니다. 셀레니움은 웹 애플리케이션의 테스트를 자동화하기 위한 도구 모음입니다. 주로 웹 브라우저를 자동으로 제어하여 사이트의 다양한 작업을 자동화하거나 테스트 케이스를 실행할 수 있습니다.

도와드릴 수 있는 구체적인 부분이 있으신가요? 예를 들어, 셀레니움을 사용하여 특정 웹사이트에 로그인하는 스크립트를 작성하고 싶으신가요, 아니면 기본적인 셀레니움 사용법에 대해 알고 싶으신가요? 조금 더 구체적인 요청을 해주시면 더 정확한 도움을 드릴 수 있을 것 같습니다.


  • 뭔지 잘 모르겠지만, GPT가 다 해준다니까... 

You

간단한 셀레니움 실습 코딩을 하고 싶어. 아래와 같은 순서로 작동하는 프로그램을 만들어줘. 1. 네이버 접속 2. 검색창에 원하는 검색어 입력 3. 검색 버튼 클릭

Grimoire

셀레니움을 사용하여 네이버에 접속하고, 검색창에 원하는 검색어를 입력한 후 검색 버튼을 클릭하는 프로그램을 만드는 과정을 단계별로 설명하겠습니다. 이 과정을 진행하기 전에 Python과 Selenium 라이브러리가 설치되어 있어야 하며, 적절한 웹드라이버(ChromeDriver 또는 GeckoDriver 등)가 필요합니다.

1단계: 필요한 라이브러리 설치

먼저, Selenium을 사용하기 위해 필요한 라이브러리를 설치해야 합니다. Python 환경에서 Selenium을 설치하려면 다음과 같이 pip 명령어를 사용합니다.

bash
pip install selenium

2단계: 웹드라이버 설정

셀레니움은 웹 브라우저를 자동으로 제어하기 위해 웹드라이버가 필요합니다. Chrome을 사용한다면 ChromeDriver를, Firefox를 사용한다면 GeckoDriver를 다운로드 받아야 합니다. 웹드라이버는 브라우저 제조사의 공식 웹사이트에서 다운로드할 수 있습니다.

다운로드 후, 웹드라이버 파일을 Python 스크립트가 있는 폴더에 두거나 시스템 경로에 추가합니다.

3단계: 셀레니움 코드 작성

이제 네이버에 접속하여 검색창에 원하는 검색어를 입력하고 검색 버튼을 클릭하는 Python 코드를 작성해 보겠습니다.

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

# 웹드라이버 경로 설정
driver = webdriver.Chrome('./chromedriver') # ChromeDriver 경로를 적절히 조정하세요.

# 네이버에 접속
driver.get('https://www.naver.com')

# 잠시 대기
time.sleep(2)

# 검색창 찾기
search_box = driver.find_element_by_name('query')

# 검색어 입력
search_word = 'Python' # 원하는 검색어를 입력하세요.
search_box.send_keys(search_word)

# 검색 버튼 클릭
search_box.send_keys(Keys.RETURN)

# 결과 화면이 나타날 때까지 잠시 대기
time.sleep(2)

# 작업 완료 후 브라우저 닫기
driver.quit()

위 코드는 크롬 드라이버를 사용하여 네이버에 접속하고, 검색창(input 태그의 name이 'query'인 요소)을 찾아 'Python'이라는 검색어를 입력한 후 검색을 수행합니다. 실제 사용시에는 './chromedriver' 부분을 자신의 크롬 드라이버 파일 경로에 맞게 수정해야 합니다.

셀레니움을 사용할 때는 웹 페이지의 로드 시간을 고려하여 time.sleep() 함수로 충분한 대기 시간을 주어야 합니다. 그렇지 않으면 웹 요소를 찾지 못해 에러가 발생할 수 있습니다.


  • 흠.. 그래 1단계부터 보자. pip install selenium? 수업 들을 때 터미널에서 했었지. 통과. 

  • 2단계. 웹드라이버? ChromeDriver 경로를 설정하라궁? 수업들을 때 이런 얘기 안해줬는데.. 그냥 아래와 같이 코드 수정.

# 웹드라이버 경로 설정
driver = webdriver.Chrome() # ChromeDriver 경로를 적절히 조정하세요. -> 몰라. 안해.


  • 위 코드만 수정하고, 그대로 코드 복사 후 파이참에서 돌림. 역시나 에러. GPT한테 물어보자.


You

위 코드에서 다음과 같은 에러가 났어. 이유를 설명해주고, 수정된 코드를 다시 작성해줘. C:\Users\arete\PycharmProjects\GPTers\venv\Scripts\python.exe C:\Users\arete\PycharmProjects\GPTers\sel_test.py Traceback (most recent call last): File "C:\Users\arete\PycharmProjects\GPTers\sel_test.py", line 15, in <module> search_box = driver.find_element_by_name('query') AttributeError: 'WebDriver' object has no attribute 'find_element_by_name' Process finished with exit code 1

Grimoire

에러 메시지에 따르면 'WebDriver' 객체에는 'find_element_by_name'이라는 속성이 없다고 합니다. 이는 Selenium 4 버전부터 find_element_by_*메소드들이find_element()메소드에 통합되었기 때문에 발생하는 문제입니다. 즉, Selenium의 최신 버전에서는 요소를 찾을 때find_element_by_name, find_element_by_id등의 메소드 대신find_element()메소드를 사용하고, 이 메소드에By.NAME, By.ID` 등의 로케이터 전략을 인자로 전달해야 합니다.

다음은 수정된 코드입니다. find_element_by_name('query') 부분을 find_element(By.NAME, 'query')로 변경했습니다. 또한, By 클래스를 사용하기 위해 selenium.webdriver.common.by에서 By를 import해야 합니다.

python
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time

# 웹드라이버 경로 설정
driver = webdriver.Chrome('./chromedriver') # ChromeDriver 경로를 적절히 조정하세요.

# 네이버에 접속
driver.get('https://www.naver.com')

# 잠시 대기
time.sleep(2)

# 검색창 찾기
search_box = driver.find_element(By.NAME, 'query')

# 검색어 입력
search_word = 'Python' # 원하는 검색어를 입력하세요.
search_box.send_keys(search_word)

# 검색 버튼 클릭
search_box.send_keys(Keys.RETURN)

# 결과 화면이 나타날 때까지 잠시 대기
time.sleep(2)

# 작업 완료 후 브라우저 닫기
driver.quit()

이렇게 수정하면, Selenium 4 버전에서도 정상적으로 작동하는 코드를 얻을 수 있습니다. 코드에서 사용한 By.NAME은 검색창과 같은 웹 요소를 그 이름으로 찾을 때 사용하는 로케이터 전략입니다. 다른 로케이터 전략에는 By.ID, By.XPATH, By.CSS_SELECTOR 등이 있어 상황에 맞게 선택하여 사용할 수 있습니다.


  • 무슨 말인지 잘 모르겠다. 그냥 복사해서 붙여넣자. 

  • 헐. 잘 되네. 끝.

#9기문과생도AI

3
1개의 답글

(채용) 유튜브 PD, 마케터, AI엔지니어, 디자이너

지피터스의 콘텐츠 플라이휠로 고속 성장할 팀원을 찾습니다!

👉 이 게시글도 읽어보세요