셀레늄 pyautogui 마우스 자동화 선택 상자

저는 3개월 동안 코딩을 배웠습니다.


Python Selenium을 통해 홈페이지에 접속하여 로그인 후 각종 종류 선택 또는 클릭, 엑셀 다운로드 등

구글링, 연습, 운동, 샤워, 이걸 해야 하나 저것을 해야 하나?

대부분의 작업은 이미 자동화되었습니다.

코딩을 처음 배우는 지점에 도달했습니다.

본업이 코딩이 아니라서 이 사람들을 계속 쓰지 않는다면?가끔 이게 저것인지 헷갈릴 때가 있어

그러면 이해가 되겠지만 왜 안 될까요?

Selenium으로 작업할 때 마우스 클릭이 아닌 동적 페이지나 마우스 오버(마우스 커서)에 메뉴가 나타나는 경우가 있습니다.

이렇게 하면 자동으로 마우스를 이동하고 거기에 놓고 find_element를 통해 찾을 수 있습니다.


cCSS :호버 선택기 효과

https://www.w3schools.com/cssref/tryit.php?filename=trycss_sel_hover_dropdown

W3Schools 온라인 HTML 편집기

W3Schools 온라인 코드 편집기를 사용하면 브라우저에서 코드를 편집하고 결과를 볼 수 있습니다.

www.w3schools.com

자세한 내용은 w3schools 웹 사이트를 방문하십시오. 예가 있습니다.

참조하십시오…

과거에는 마우스 오버 효과가 많이 사용되었으나 최근에는 드물다.

하지만 셀레늄을 하기 위해서는 코드를 분석하고 작성해야 합니다.

간단한 마우스 자동화를 시도해 봅시다.

자주찾는 홈페이지 오피넷 (내 주변 저렴한 주유소)

주유하기 전에 항상 인터넷으로 근처 싼 주유소를 검색해서 가는 습관이 생겼습니다.

. .

https://www.opinet.co.kr/user/main/mainView.do

Opinet에서 저렴한 주유소 찾기

www.opinet.co.kr

오피넷 홈페이지에 가시면 w3schools에서 보던 마우스오버 효과를 보실 수 있습니다.


마우스오버 시 메뉴바가 나타납니다…

마우스를 자동화하려면 내가 보고 있는 디스플레이에서 마우스의 x축과 y축 좌표를 알아야 합니다.

간단히 말해 move x=100 및 move y=100이라고 하면 마우스 커서가 자동으로 그곳으로 이동합니다.

마우스 자동화용

pyautogui

사용하려면 라이브러리를 설치해야 합니다.

pip install pyautogui

그리고 앞서 언급한 x축과 y축은 어떻게 알 수 있을까요? ? ? ? ? ? 의심이 생깁니다.

마우스 자동화를 위한 x축 y축 좌표


마우스 좌표 등을 찾는 도구

방법도 매우 간단합니다.

#라이브러리 불러오기
import pyautogui


pyautogui.mouseInfo()

할 수 있다……!
!
!
!
!
!
!

오류가 발생합니다.

PS D:\code\python> & D:/python/python.exe d:/code/python/example/pyautogui.py
Traceback (most recent call last):
  File "d:\code\python\example\pyautogui.py", line 2, in <module>
    import pyautogui
    ^^^^^^^^^^^^^^^^^^^
AttributeError: partially initialized module 'pyautogui' has no attribute 'mouseInfo' (most likely due to a circular import)


AttributeError: 부분적으로 초기화된 모듈 ‘pyautogui’에 ‘mouseInfo’ 속성이 없습니다(대부분 순환 가져오기 때문일 가능성이 높음).

문제를 풀다

https://pypi.org/project/MouseInfo/

마우스 정보

현재 마우스 아래에 있는 픽셀의 XY 위치 및 RGB 색상 정보를 표시하는 응용 프로그램입니다.

Python 2 및 3에서 작동합니다.

pypi.org

pip install mouseinfo

터미널에 설치되면 다음과 같이 변경할 수 있습니다.

#라이브러리 불러오기
import mouseinfo

mouseinfo.mouseInfo()


mouseinfo 0.1.3 정상 실행

솔직히 이유를 모르겠습니다.

Python 버전이 지원되지 않거나 라이브러리가 업데이트되고 실행 명령이 변경되는 경우가 있습니다.

이제 연습을 위해 Opinet에 연결해 보겠습니다.

좌표를 얻으려면 mouseinfo 0.1.3 창이 실행 중이어야 합니다.


저렴한 주유소 찾기에 마우스를 올리면 mouseinfo 0.1.3을 통해 마우스 x,y 값을 표시합니다.

X = 416 , Y = 113


바로 아래 영역의 하위 메뉴 위로 마우스를 가져가면 마우스 x 및 y 값이 동일하게 나타남 X = 381 , Y = 185

이제 코딩을 시작해 볼까요?

마우스 자동화를 수행하려면 입력 라이브러리를 가져와서 사용 방법을 알아야 합니다.

pyautogui.moveTo(마우스 X축 값, 마우스 Y축 값, 마우스 커서 체류 시간(초))

pyautogui.moveTo(401 , 113 , 5)		#(X축좌표, Y축좌표, second)

이렇게 사용할 수 있습니다.

이제 라이브러리를 로드하고 코딩하기만 하면 됩니다.

#라이브러리 불러오기
import pyautogui
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
import time



#driver = webdriver.Chrome() # 현재파일과 동일한 경로일 경우 생략 가능
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.maximize_window()

baseurl="https://www.opinet.co.kr/user/main/mainView.do"


#사이트 이동(지역별)
driver.get(baseurl)

#지역별 옵션으로 가기위함 마우스자동화
pyautogui.moveTo(416, 113,5) #오피넷 싼 주유소 찾기 마우스 좌표로 이동
time.sleep(5)
pyautogui.moveTo(381, 185,5) #지역별로 이동
time.sleep(2)
pyautogui.click()	#마우스자동화된곳 클릭
time.sleep(10)		#페이지 이동 되었는지 대기시간을 10초

작성하고 실행하면 됩니다.

달려라~~

이런… 문제가 있습니다.

우리가 보통 크롬 브라우저를 실행할 때 찾는 좌표는 브라우저가 Selenium을 실행할 때 찾는 좌표와 조금 다릅니다.

Selenium을 사용할 때 항상 나타나는 자동화 창


Selenium을 실행할 때 항상 제어의 아이디어를 따르십시오 …

일반 셀레늄은 전혀 문제가 되지 않습니다.

x축과 y축을 사용하는 경우에만 이 창에서 밀어냅니다.

x축에는 큰 문제가 없지만 저 자동화된 제어 주석 때문에 다시 y축을 보려면 약간 아래로 내려가야 합니다.

#지역별 옵션으로 가기위함 마우스자동화
pyautogui.moveTo(416, 146 , 5) #오피넷 싼 주유소 찾기 마우스 좌표로 이동
time.sleep(5)
pyautogui.moveTo(381, 216 , 5) #지역별로 이동

싼 주유소 메뉴와 지역 하위 메뉴는 y축에 약 310,000개 있습니다.

영역 하위 메뉴에서 pyautogui.click()은 이러한 클릭 명령을 제공하므로 마지막으로 클릭하여

페이지가 이동하는 것을 볼 수 있습니다.


지역별 페이지

파이썬 셀레늄 선택 상자

지역 페이지로 이동하면 아래와 같이 지역을 선택할 수 있는 선택 박스가 나타납니다.

그런 다음 원하는 값을 선택할 수 있도록 선택 상자를 갤러리에 넣습니다.

from selenium.webdriver.support.ui import Select

이거 추가 해봐.

홈 페이지의 선택 상자와 값이 어떻게 생겼는지 분석해 봅시다.

F12를 누르면…


서울, 부산, 대구를 선택하여 지역 선택 시 시/도를 우선시할 수 있도록 하였습니다.

가치 가치 서울광역시 부산광역시 대구광역시 이렇습니다.

그렇다면 특수도시와 메가시티에 모든 가치를 두어야 한다!

다음 선택 상자도 같은 방식으로 값을 분석합니다…


city/county/town 값은 선택한 텍스트와 동일합니다.

#지역 시/도 선택 (지역별주유소 셀렉트박스#1)
dropdown = Select(driver.find_element(By.XPATH, '//*(@id="SIDO_NM0")'))
dropdown.select_by_value("서울특별시")
time.sleep(2)

#지역 시/군/구 선택 (지역별주유소 셀렉트박스#2)
dropdown = Select(driver.find_element(By.XPATH, '//*(@id="SIGUNGU_NM0")'))
dropdown.select_by_value("강남구")
time.sleep(2)

선택창에서 첫 번째 “서울시”를 선택한 후 “강남구”를 선택하세요!
!
(서울에 몇 번 안 가봤는데.. )

그리고 검색을 누르셔야 오피넷에서 시/도 또는 시/군/구를 선택하시면 자동으로 검색됩니다.

그래도 모르면 검색버튼을 누르게 만든다.

일반적으로 버튼이나 찾아야 할 곳에 마우스 오른쪽 버튼을 클릭하고 검사를 클릭하면 자동으로 f12 개발자 모드를 찾습니다.

Chrome DevTools – 페이지에서 요소를 선택하여 검사


홈페이지 html을 알고 싶을 때 사용하기 쉬운 체크버튼

Opinet과 같은 금지 사이트를 마우스 오른쪽 버튼으로 클릭하고 F12를 누릅니다.

Chrome 개발자 도구 – 페이지에서 검사할 요소를 선택합니다.


Chrome DevTools – 페이지에서 요소를 선택하여 검사

Chrome 개발자 도구 – 요소 검사를 사용하면 쉽게 할 수 있습니다.

검색 후 드디어 다운로드한 파일을 엑셀로 저장할 수 있게 되었습니다.

하단에 “Excel 저장”이라는 버튼이 있습니다.

또한 개발자 도구 요소 검사를 사용하여 XPath를 복사하십시오.


엑셀 저장 XPath

중복 메뉴를 보시면 중복이 많이 보이실 겁니다.

이제 XPath

일반적으로 셀레늄 또는 bs4(크롤링)와 함께 사용됩니다.

요소가 무엇이고 XPath가 무엇인지는 설명하지 않겠습니다.

이런 종류의 이론을 수행하면 코딩에 대한 관심이 갑자기 떨어질 것입니다.

그 사람들을 사용하고 결과부터 시작하십시오 … 왜 재미있습니까!

다음은 최종 코드입니다.

###########################################################################################################################
#오피넷(주유소) 사이트 접속해서 해당지역 최저가 엑셀다운로드
###########################################################################################################################
#라이브러리 불러오기
import pyautogui
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
import time

#driver 지정 없으면 자동설치
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.maximize_window()

#홈페이지주소
baseurl="https://www.opinet.co.kr/user/main/mainView.do"


#사이트 이동(지역별)
driver.get(baseurl)

#지역별 옵션으로 가기위함 마우스자동화
pyautogui.moveTo(416, 146,5) #오피넷 싼 주유소 찾기 마우스 좌표로 이동
time.sleep(5)
pyautogui.moveTo(381, 216,5) #지역별로 이동
time.sleep(2)
pyautogui.click()	#마우스자동화된곳 클릭
time.sleep(3)


#지역 시/도 선택 (지역별주유소 셀렉트박스#1)
dropdown = Select(driver.find_element(By.XPATH, '//*(@id="SIDO_NM0")'))
dropdown.select_by_value("서울특별시")
time.sleep(2)

#지역 시/군/구 선택 (지역별주유소 셀렉트박스#2)
dropdown = Select(driver.find_element(By.XPATH, '//*(@id="SIGUNGU_NM0")'))
dropdown.select_by_value("강남구")
time.sleep(2)

#상단 지역별 선택 후 조회버튼클릭
driver.find_element(By.XPATH, '//*(@id="searRgSelect")').click()
time.sleep(2)

#보통휘발유 선택 (기본값이라 생략가능)
driver.find_element(By.XPATH, '//*(@id="os_layer2")/p/a').click()
time.sleep(2)

#엑셀파일 저장
driver.find_element(By.XPATH, '//*(@id="glopopd_excel")').click()
time.sleep(5)

#브라우저 종료(닫기)
driver.quit()