Profile picture

[Python] 셀레니움(Selenium) 네이버 로그인 헤드리스(Headless) 활성화해서 구현하기

JaehyoJJAng2024년 07월 03일

개요

셀레니움으로 네이버 로그인을 진행할 때 Pyperclip을 사용하면 헤드리스(headless)를 활성화할 수 없는 문제가 발생한다.

셀레니움의 headless 모드에서는 클립보드 접근이 제한되기 때문이다.

headless 모드는 브라우저 UI를 렌더링하지 않고 백그라운드에서 실행하기 때문에, 브라우저가 클립보드와 같은 시스템 리소스에 접근하기 어렵다.

이로 인해 클립보드에 복사한 내용을 브라우저 내부로 붙여넣는 동작이 제대로 수행되지 않기 때문에 문제가 발생하는거다.


문제 해결 방법

이 문제를 해결하기 위해 자바스크립트로 아이디/패스워드에 value를 입력하는 방식으로 변경하였다.

이렇게 하면 로그인 시 headless 모드 사용이 가능하고, pyperclip 라이브러리를 쓸 필요도 없어진다.

class Login():
    def run(self) -> None:
        # 로그인
        self.login()

    def login(self) -> None:
        self.ch.driver.get(url=self.login_url)
        try:
            self.ch.driver.execute_script(
                f"document.querySelector('input[id=\"id\"]').setAttribute('value', '{self.login_info["ID"]}')"
            )
            time.sleep(1.5)
            self.ch.driver.execute_script(
                f"document.querySelector('input[id=\"pw\"]').setAttribute('value', '{self.login_info["PW"]}')"
            )
            time.sleep(1.5)

            login_btn = self.ch.driver.find_element(By.ID, "log.login")
            login_btn.click()
            time.sleep(1.5)
        except Exception as e:
            print(f"로그인 실패: {e}")
        finally:
            time.sleep(5)

참고 블로그


Loading script...