본문으로 바로가기

아주 예전에 웹 정보를 쉽게 가져올 수 있는 Beautiful Soup을 이야기했었는데요.[바로가기] 이 아이만으로는 약간 한계가 있습니다. 뭐 꼭 버튼을 클릭해야한다던지, 로그인 화면처럼 어떤 정보를 입력해야하는데 그게 접근 주소에 나타나면 쉽게 접근해 볼 수 있는데, 그렇지 않다든지 하는 일들이지요. 그럴때 요즘에 셀레니움(Selenium)을 많이 사용하시는 것 같아요^^. 그래서 그 아이를 한 번 이야기할려구요. 그래서 네이버에 로그인을 하고 또 살짝 내 메일함에서 보낸사람 목록을 추출해 볼까 합니다.^^

먼저 pip install selenium으로 셀레니움을 설치합니다.

그리고 크롬드라이버를 자신의 OS에 맞춰서 다운로드 받습니다.

이제 쉽게 사용하는 방법은 이 4줄을 입력해 보는 겁니다. 아 크롬드라이버는 경로에 신경쓰셔야죠^^ 아무튼 위 코드.. driver.get("http://naver.com")이 실행되면 바로 크롬 새 창이 뜨면서 네이버에 접속해 있을 겁니다.

앗.. 로그인창이 바로 나타나는 줄 알았더니 버튼을 한 번 눌러야하네요. 이럴떄는 크롬의 개발자 도구에 들어가서 위에 작은 네모로 표시된 Select 버튼을 누르고 NAVER 로그인이라는 버튼을 누르면 해당 코드를 보여줍니다. 거기서 a 태그에서 마우스 오른쪽 버튼을 눌러서...

Copy XPath를 선택하면 됩니다.

그리고, driver.find_element_py_xpath 명령안에 아까 copy된 XPath를 붙여넣기 하면 됩니다. 단 붙여넣기해서 그 결과를 보면 아시겠지만, 따옴표(")가 있어서 따옴표 세 개(""")를 사용합니다. 아무튼 위 명령에 .click()옵션을 붙여서 실행하면 네이버의 로그인 화면으로 넘어가게 됩니다.

이제 아이디와 비밀번호를 입력해야하는 데요... 그 둘을 입력하는 텍스트 입력창의 id를 확인해야 합니다. 그 방법은 위에서 로그인 버튼 찾을 때와 같이 크롬의 개발자 도구를 이용해서 찾는게 편합니다.

그렇게 아이디와 비밀번호 입력창의 id를 확인하고... (위 그럼처럼 아이디는 id, 비밀번호는 pw입니다)

그리고, driver.find_element_by_id에 id와 pw를 넣고, 이어서 .send_keys로 아이디와 비밀번호를 입력합니다.

그리고.. 그 아래 로그인 버튼의 XPath를 copy해 둡니다.

이제.. driver.find_element_by_xpath로 버튼을 누르면.. 로그인이 완료됩니다.^^

그리고.. driver.get을 통해 네이버 메일로 연결하죠^^ (뭐 바로 가도 되지만... 그냥 첫화면 부터 진행하고 싶었습니다.^^) 그러면 Python에서 Selenium으로 관리하는 크롬 페이지의 네이버 화면이 네이버 메일 화면으로 넘어갈겁니다.^^

이제.. driver.page_source를 이용하면 현재 페이지의 주소를 알 수 있습니다. 그걸로 Beautiful Soup을 이용해서 페이지를 읽으면 됩니다. ㅎ

이제 읽어야할 테그를 확인해야 하는데요.. 뭐 그건... 또 크롬 개발자 도구를 쉽게 사용하면 됩니다.^^ 

그런데 class의 이름이 약간 복잡하네요.. 통으로 복사를~^^

일단, soup.find_all로 해당 태그를 모두 찾아봅니다.

.get_text()로 쉽게 리스트로 땡겨왔습니다. 근데 어째 죄다 보낸사람이 광고ㅠㅠ.

앗.. 메일 리스트에 페이지가 하나 더 있네요... 그 위치를 알아내는 것도.. 역시 크롬 개발자 도구에서~

역시 쉽게 이동됩니다.

ㅎㅎ.. 다 얻었네요. . Selenium과 Beautiful Soup을 사용한다면 웬만한 웹페이지에는 접근할 수 있겠네요^^


댓글을 달아 주세요

  1. BlogIcon 핑구야 날자 2017.04.24 08:14 신고

    쉽게 이용할 수 있는 분들이 적겠지만 재미있네요

  2. 임별님이 2017.05.09 11:33

    정말 재미있게 실습 잘했습니다. 감사합니다!

  3. 큿흠 2019.02.03 23:58

    덕분에 트립어드바이저 크롤링이 가능해졌습니다.

  4. ㅇㅅㅎ 2020.02.17 09:33

    어디에 질문해야할지 몰라서 일단 Selenium 관련 포스팅 올리신 곳에 댓글 답니다.

    안녕하세요 저는 파이썬으로 데이터 주무르기 책 보고 Selenium 학습하고 있는데요.

    싼 주유소 찾기 Opinet 사이트에서 웹드라이버 가동 후에 지역별 주유소 찾아볼 수 있는 url로 다이렉트하기 위해

    driver.get("http://www.opinet.co.kr/searRgSelect.do")를 입력하면 해당 화면이 나오는 게 아니라 오피넷 대문이 나오는데요(http://www.opinet.co.kr/user/main/mainView.do)

    이럴 경우 어떻게 해야하는지 해결방법을 모르겠습니다.

    힘든(?) 월요일 한 주의 시작 즐겁게 보내세요~!

    • BlogIcon PinkWink 2020.02.21 16:50 신고

      그렇게 바뀌었군요. 그럴때는 셀레니움이 띄운 구글 드라이브에서 직접 (간단히) 클릭해서 움직이려고 되고, 또 혹은 접근해야만 xpath를 따서 클릭하셔도 됩니다.

  5. BlogIcon snowfield 2020.04.24 17:19 신고

    안녕하세요! 보고 크롤링을 처음 해보는 학생입니다!
    xpath를 따서 click 메소드로 클릭까지 해보았는데, 브라우저에는 띄워지나 find_element_by_tag_name으로 했을 때 처음에 get으로 넣어진 데이터를 가져오는 이유는 무엇일까요..? ㅠ__ㅠ
    click한 다음 페이지를 가져와야하는 게 아닌지 ㅠㅠ 궁금해서 여쭤봅니다!

  6. 모르겠다미치겠습니다. 2020.05.17 13:01

    안녕하세요. 질문 하나 드릴게요.
    셀레니움으로 유저 목록을 추출했을때
    1번~10번 유저까지 추출을 진행했을때 가정하에

    1번
    2번
    3번
    4번 이렇게 잘되다가

    1번
    5번
    3번
    2번
    4번 이런식으로 뒤섞이는데 이 부분은 어떻게 해결을 하면 되나요?