로그인이 필요한 페이지 크롤링 / Selenium 파일 다운로드

조회수 2166회

로그인을 해야 접근 가능한 페이지에서 이미지 파일을 긁어와 저장하고 싶습니다. 자바스크립트 때문에 Selenium을 사용하려고 하는데, 로그인을 하지 않으면 이미지 파일에 접근할 수 없어 requests를 이용해 파일을 저장하는 것이 어려워 보입니다.

webdriver를 이용해 파일을 저장할 수 있는 방법이 있나요?? 혹은 다른 해결 방법이 있을까요...?

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 방법 찾아서 해결 했습니다. Seleium으로 로그인 한 뒤, 쿠키를 복사해서 requests에 전달해주면 됩니다.

    with requests.Session() as s:
        for cookie in driver.get_cookies():
            s.cookies.set(cookie['name'], cookie['value'])
        with open('img.png', "wb") as file:
            response = requests.get(url, headers=HEADER)
            file.write(response.content)
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 웹, 자바스크립트에 대한 기초적인 지식이 있어야 할 수 있어요

    먼저, 해당 페이지가 로그인 요청을 어디로, 어떤 방식으로 보내는지를 파악하시고, (onclick인지, submit인지, js처리인지... 요즘 페이지는 99퍼 js입니다.)

    그 폼에 맞는 자료형을 만들어서 (보통 json형식) 해당 페이지로 값들을 넘겨주는 세션을 만들면 됩니다.

    세션을 만들때는 보통 리퀘스트 모듈의 requests.Session() 이 함수를 사용해서 만듭니다.

    예전에 관련 코딩을 할 때 밑의 링크를 참조해서 만들었습니다. 질문자님도 보시면 많은 도움이 될 듯 합니다. https://beomi.github.io/2017/01/20/HowToMakeWebCrawler-With-Login/

    • 전에 submit 버튼으로 POST 요청을 보내서 로그인하는 방식의 사이트는 해당 방법으로 해본 적이 있는데, 이번 사이트에서는 자바스크립트로 처리하는 듯 싶은데 자바스크립트 지식도 조금 부족하고, 코드가 난독화되어 있어서 파악하기 힘드네요... 혹시 코드를 직접 들여다보는 방법 말고도 어떤 페이지에 어떤 값을 보내는지 추적할 수 있는 방법이 있나요? 알 수 없는 사용자 2020.2.5 15:25
    • 함수를 알아보기가 힘들어도, js는 html의 id와 값을 넘겨받아서 처리를 해주는걸 생각하시면 쉽습니다. 로그인 폼의 id와 pw에 해당하는 id값 ex) id="login_id" 을 기반으로 찾아보시면 수월할 겁니다. ohsangyun 2020.2.5 15:51
    • 이상하게 모든 자바스크립트 파일을 뒤져봐도 input의 id값이 나오지 않네요 ㅠㅠ / 개발자도구를 이용해서 어떤 값을 POST로 전달하는지 확인해 보았는데, 암호화를 한번 거쳐서 전송하고, 생성된 암호화 값 또한 계속해서 변경되네요. CAPTCHA 까지 사용해서 로그인을 막는 것 같습니다. 아무래도 requests를 이용해서 로그인을 하는 것은 힘들 것 같습니다. selenium에서 파일을 가져올 수 있는 방법이 있는지 찾아봐야겠어요 ㅠㅠ 알 수 없는 사용자 2020.2.5 18:01
    • @DEVIA ㅠㅠ... 보안이 엄중한 곳은 제가 기존에 알고 있던 방법이 안통하나 보네요... 도움이 안되서 죄송합니다. ohsangyun 2020.2.5 19:15

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)