인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

밑바닥개발자님의 프로필 이미지
밑바닥개발자

작성한 질문수

현존 최강 크롤링 기술: Scrapy와 Selenium 정복

실전 크롤링: 브라우저를 제어해서 다양한 데이터 가져오기

크롬 브라우저 로딩시 id/password 자동완성

작성

·

612

0

예를들어 크롬 브라우저에서 네이버 로그인을 할 때 예전에 제가 id/pw를 쿠키로설정(쿠키개념이 맞나 모르겠습니다..)하여서 id/pw가 자동완성된 상태로 브라우저가 있는데 이럴 때 selenium으로 로그인 조작할 때 어떻게 해야 할까요..? .clear()로 id/pw 입력칸 초기화시켜두 안되네요 ㅜㅜ 

답변 2

1

안녕하세요. 우선은 제 강의를 보시고, 꼭 도움이되셨으면 좋겠습니다.

요청하시는 부분이 수강자분께서 원하시는 크롤링 프로그램을 구현하는 코드를 만들어야하는 것인데요. 강좌에서 제시하는 크롤링 코드에 대해 문의를 주신다면 답변이 가능하지만, 각자 원하시는 크롤링 프로그램을 봐드리는 것은 무리가 있어서요. 왜냐하면, 크롤링은 웹페이지마다 다양한 케이스가 있어서요.  각자 원하시는 웹페이지를 위한 코드를 만든 후, 해당 부분에 어떤 부분이 문제가 있는지 또는 심지어 특정 케이스 추출을 위해 코드를 어떻게 작성할지를 알기 위해서는 결국 제가 직접 해당 웹페이지를 크롤링하는 프로그램을 작성해봐야 하거든요. 즉 크롤링 프로그램을 만들어드려야 하는데, 각자가 원하는 프로그램을 만들어드리기는 무리가 있어서요. 혹여나 시간을 들여서 프로그램까지 만들어서 답변드리게 되면, 오해 아닌 오해로, 모든 수강생분들이 이 강의를 들으면 각자가 원하는 크롤링 프로그램을 심지어 평생 요청하면 만들어준다는 오해까지 할수 있어서요. 이 부분은 꼭 좀 양해를 부탁드립니다.

그럼에도 불구하고, 조금이라도 도움이되고자 설명을 드리면, 시간차가 있을 수 있습니다.

1) 이 부분은 time.sleep(초) 명령을 통해, selenium으로 해당 페이지를 다 load 할때까지 완벽하게 기다린 후에, 입력을 해보면 좋을 것 같구요.

2) 입력창의 경우 실제 입력창관련 태그인 input 태그를 직접 선택하셔서 해당 데이터를 넣어주면 좋을 것 같아요.

저의 경우에는 쿠키가 걸려있긴 했는데, 크롬브라우저로 selenium을 사용했을 경우에는 쿠키값이 덮어씌워지지는 않았어요. 그래서 완벽하게 동일한 환경은 아닐 수 있지만, 다음 코드를 통해 5초간 완벽히 페이지 로드 후, ID/PW를 넣고, 로그인을 해볼 수 있었습니다. 1)번도 적용해보시고, 2)번이 적용이 잘 안되었다면, 해당 input 태그를 명확히 찍어서 clear() 함수를 호출해봐도 좋을 것 같습니다.

감사합니다.

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import time

 

# 드라이버 생성

# chromedriver 설치된 경로를 정확히 기재해야 함

# chromedriver = 'C:/dev_python/Webdriver/chromedriver.exe' # 윈도우 

chromedriver = '/usr/local/Cellar/chromedriver/chromedriver' # 맥

driver = webdriver.Chrome(chromedriver)

 

# 크롤링할 사이트 호출

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

 

# Selenium은 웹테스트를 위한 프레임워크로 다음과 같은 방식으로 웹테스트를 자동으로 진행함 (참고)

time.sleep(5)

 

# <input id="id-search-field" name="q" 검색창 name으로 검색하기

# 태그 name으로 특정한 태그를 찾을 수 있음

elemid = driver.find_element_by_name("id")

elempw = driver.find_element_by_name("pw")

# input 텍스트 초기화 

# elem.clear()

 

# 키 이벤트 전송가능함

# 태그가 input 태그이므로 입력창에 키이벤트가 전달되면, 입력값이 자동으로 작성됨

elemid.send_keys("pycon")

elempw.send_keys("pycon")

 

elempw.send_keys(Keys.RETURN)

0

감사합니다! 해결되었습니다!!

밑바닥개발자님의 프로필 이미지
밑바닥개발자

작성한 질문수

질문하기