- 0
- 이니스프리
- 조회 수 4821
안녕하세요? 좋은 아침입니다!
요새 네이버를 비롯하여 다수의 사이트의 로그인 창에서 Selenium의 send_keys를 막아놓은 경우가 있더군요.
저도 아직 확실한 해결책을 찾지 못했지만 요새 삽질해서 얻은 교훈을 적어봅니다.
1. 자바스크립트를 이용하기
대략 아래와 같은 방법을 생각해볼 수 있습니다.
driver.execute_script("document.getElementsByName(패스워드 입력칸의 Name)[0].value=\'" + '패스워드' + "\'")
Stackoverflow에서는 해당 element의 속성을 최대한 removeattribute 하라는 조언도 있더군요.
(특정 속성을 추가하라는 내용도 봤는데 이 방법도 잘 안 되었습니다)
다만 제가 테스트한 사이트에서는 이 방법이 잘 먹히지 않았습니다 ㅠㅠ
(Stackoverflow에 달린 리플을 봐도 이 방법까지 막아놓은 경우가 많은 것 같더군요)
2. PyAutoGUI를 이용한 Copy & Paste
제가 테스트한 사이트들도 그렇고, 다른 분들의 블로그를 봐도 그렇고
다행히 Pyperclip 등 클립보드 라이브러리를 이용하여 비밀번호를 Copy & Paste 하는 방법은 막아놓지 않았더군요.
아마도 이걸 막아놓으면 일반적인 유저들도 불편하기 때문일 것 같네요 ㄷㄷ
pyautogui.hotkey("ctrl", "v")
간단히 위와 같은 방법으로 할 수도 있고,
PyAutoGUI를 이용하여 마우스 우클릭 후 방향키와 엔터를 누르는 방법으로 Copy & Paste를 할 수 있습니다.
다만 이 방법은 백그라운드에서는 사용할 수 없습니다.
현재 활성화된 창에서 Copy & Paste가 되기 때문입니다 ㅠㅠ
제가 테스트해보지는 않았지만 headless 모드에서는 Selenium 창이 비활성화되어 있기 때문에 아마도 안 될 것 같네요.
3. Selenium만을 이용한 Copy & Paste
Selenium만으로 Copy & Paste가 가능한지 저도 궁금해서 저도 여러 방법을 시도했는 다음과 같은 방법으로 성공했습니다.
from selenium.webdriver.common.keys import Keys
element.send_keys(Keys.CONTROL, 'v')
Stackoverflow에 os.system("echo %s| clip" % text.strip())을 삽입해야 한다는 답변도 있었는데요.
일단 제가 테스트한 환경에서는 이 부분을 제외하고도 Copy & Paste가 되는 것을 확인하였습니다.
참고로 아래와 같은 방법은 잘 되지 않았습니다 ㅠㅠ
actions = ActionChains(driver)
actions.key_down(Keys.CONTROL)
actions.send_keys("c")
actions.key_up(Keys.CONTROL)
Stackoverflow나 여러 블로그의 글을 보더라도 현재로서는 확실한 해결책이 없는 것 같더군요.
제가 나중에라도 더 확실한 방법을 알게 되면 댓글을 남기도록 하겠습니다 ^^
그럼 오늘도 좋은 하루 되세요!