• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

macOS 에서 pyautogui.hotkey("command", "v") 로 하는거 맞는지요?

22.03.26 08:46 작성 조회수 2.54k

1

안녕하세요.

좋은 강의 잘 보고 있습니다.

다름이 아니라 강의 내용중 자동입력방지 차단을 우회 하고자 pyautogui.hotkey("ctrl", "v") 코드로 입력한다고 하셔서 저는 macOS 사용자라 pyautogui.hotkey("command", "v") 로 해서 만들었습니다.

그런데 코드를 실행시 크롬브라우저가 실행되고 ID/Password 입력하는게 진행이 안됩니다.

제 생각으로 command 가 아니고 다른게 들어가야 하는거 아닐지 문의 드립니다.

 

답변 2

·

답변을 작성해보세요.

1

맥에서 마우스/키보드 조작 권한 설정이 안되어 있는 것 같습니다.

저는 "Pyautogui mac not working" 라는 키워드로 검색해서 

아래 사이트에서 힌트를 얻었습니다.

 

1. https://stackoverflow.com/questions/62035751/pyautogui-not-running-on-mac-catalina

2. https://github.com/asweigart/pyautogui/issues/247

 

 

Not a pyautogui user, but on Mojave, there's a new security feature where you must explicitly allow applications to use your mouse/keyboard. Have a look in Security Preferences > Security & Privacy > Privacy > Accessibility - you might have to allow your terminal application in the list.

 

 

이 부분 을 참고해서 권한 설정을 부여해 보시기 바랍니다 ^^ 

HLY님의 프로필

HLY

질문자

2022.03.31

아... 정말 고맙습니다. 너무너무 감사합니다.

덕분에 잘 해결되었습니다.

해결한 내용은 아래와 같습니다.

시스템환경설정 -> 보안및개인정보보호 -> 손쉬운사용 -> 개인정보보호 

여기서 '터미널' 과 'Visual Studio Code' 를 추가하였습니다.

수고하셨습니다 ^^

1

안녕하세요.

코딩을 가장 쉽게 알려주는 크리에이터, 스타트코딩입니다.

 

pyautogui hotkey 함수가 특정 mac에서 제대로 동작하지 않는 것 같습니다.

(제 맥북에서는 잘 동작합니다)

라이브러리의 이슈로 생각됩니다.

 

hotkey대신에 keyDown -> press -> keyUp 으로 구현해 보세요 ^^

 

hotkey('command', 'v')

 

keyDown('command')

press('v')

keyUp('command')

HLY님의 프로필

HLY

질문자

2022.03.29

안녕하세요. 답변 주셔서 감사합니다.

말씀하신데로 keyDown -> press -> keyUp 방법으로 구현을 해봤지만 동일하게 화면에 입력이 안되는것처럼 보이네요.

아래 전체 소스 보내드립니다. 많이 바쁘시겠지만 검토 요청 드립니다.

(비밀 번호는 제가 임시 비밀번호로 변경했습니다.)

 

from optparse import Option
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

 

# 크롬 드라이버 자동 업데이트
from webdriver_manager.chrome import ChromeDriverManager

 

import time
import pyautogui
import pyperclip

 

# 브라우저 꺼짐 방지
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

 

# 불필요한 에러 메시지 없애기
chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"])

 

service = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)

 

# 웹페이지 해당 주소 이동
driver.implicitly_wait(5) # 웹페이지가 로딩 될때까지 5초는 기다림
driver.maximize_window() # 화면 최대화

 

driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com")

 

# 아이디 입력창 찾기
id = driver.find_element(By.CSS_SELECTOR, "#id")
id.click()
# id.send_keys("yuheewon01")
pyperclip.copy("yuheewon01")
pyautogui.keyDown("command")
pyautogui.press("v")
pyautogui.keyUp("command")
time.sleep(2)

 

# 아이디 입력창 찾기
pw = driver.find_element(By.CSS_SELECTOR, "#pw")
pw.click()
# pw.send_keys("test00!!")
pyperclip.copy("test00!!")
pyautogui.keyDown('command')
pyautogui.press('v')
pyautogui.keyUp('command')
time.sleep(2)

 

# 로그인 버튼
login_btn = driver.find_element(By.CSS_SELECTOR, "#log\.login")
login_btn.click()