Problem Solving Through Python

|  파이썬을 활용하여 우리가 PC를 사용하면서 접하는 문제를 보다 간단히 해결하는 내용을 다룹니다. - 기초수준

조회 수 257 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

requests python에 대한 이미지 검색결과



본래 예정되었던 파이썬 반복문에 관한 강좌는 아니고, 잠깐 Selenium에 관한 글을 적겠습니다.


구글링해보면 Selenium의 세션을 Requests로 보내는 방법에 대한 웹문서는 많지만, 그 반대 경우에 대해서는 제대로 된 서술을 찾기 어려워서 적어봅니다.


물론 어디까지나 제 허접한 수준에서 우여곡절 끝에 발견한 방법이기 때문에, 보다 간명한 다른 방법이 있을 것 같습니다 ^^



굳이 Requests에서 Selenium으로 세션을 전송할 필요가 있는가 하는 생각도 드시겠지만, 요새 Selenium에서의 로그인을 특별히 신경써서 막아놓은 사이트들을 적지 않게 발견할 수 있습니다.


예컨대 Selenium에서 패스워드를 입력하는 것을 막아놓아서 우회적으로 Pyperclip 등 라이브러리를 이용하여 Ctrl+C, V를 해야 하는 경우가 있습니다.


구체적인 우회방법에 대해서는 제가 이전에 허접한 글을 올렸습니다.


참고 : https://studyforus.com/innisfree/584242


이 경우에 Headless 모드에서 구동시키거나, 우분투에서 실행하는 경우에 Ctrl+C, V가 제대로 작동하지 않을 수 있습니다.


따라서 이러한 문제를 해소하고 모든 환경에서 원활하게 로그인 처리를 하기 위하여 다음과 같은 스크립트를 작성하였습니다.



import requests
from selenium import webdriver

driver = webdriver.Firefox()

def transfer_session():
   LOGIN_INFO = {
       'id': user_id,
       'password': user_pw
   }
   s.get('URL')
   s.post('URL/login_check.php', data=LOGIN_INFO)
   driver.get('URL') # 여기에 이 부분이 들어가지 않으면 에러가 발생합니다.
   for c in s.cookies:
       driver.add_cookie({'name': c.name, 'value': c.value, 'path': c.path, 'expiry': c.expires})
   driver.refresh()
   return



간략히 알고리즘을 설명드리면, 우선 Requests로 로그인을 진행한 후에 Selenium 창을 띄운 상태에서 add_cookie를 하고나서 driver.refresh()를 해주는 방식입니다.


(i) Selenium을 미리 띄워놓지 않은 상태에서 쿠키를 보내고 창을 열려고 하거나, (ii) driver.refresh()를 하지 않는 경우에는 "Document is cookie-averse."라는 에러가 발생할 수 있습니다.


결론적으로 주석을 달아놓은 부분을 쿠키를 넘기기 전에 넣어주는 것이 핵심이라고 하겠습니다.


꼭 .refresh()가 아니더라도 Selenium을 미리 띄워놓아야 한다는 의미에서 드리는 말씀이에요.



스포어의 고수님들께서 더 간단한 방법을 알고 계시다면 조언 부탁드리겠습니다 ^^


그럼 즐거운 주말 되세요!


Problem Solving Through Python

파이썬을 활용하여 우리가 PC를 사용하면서 접하는 문제를 보다 간단히 해결하는 내용을 다룹니다. - 기초수준

List of Articles
번호 제목 글쓴이 날짜 조회 수
22 22. [OpenPyXL] 엑셀 문서 저장하기 / 시트 추가하기 / 셀에 입력하기 14 file 이니스프리 2020.02.02 240
21 21. [OpenPyXL] 엑셀 문서를 열고 시트에서 셀의 값을 얻기 2 file 이니스프리 2020.02.01 109
20 [BeautifulSoup] 자식태그를 제거하기 - .decompose() & .extract() 2 file 이니스프리 2020.01.16 191
19 [python-telegram-bot] 4096자 글자수 제한을 우회하는 방법 file 이니스프리 2020.01.12 153
18 [Requests] Selenium을 이용한 Cloudflare의 우회 3 file 이니스프리 2020.01.08 193
17 9. 파이썬 문법 팁 정리 file 이니스프리 2020.01.04 151
16 [번외편] 네이버 동영상에서 자막을 파일로 추출하는 방법 2 file 이니스프리 2019.12.25 252
15 4. 문자열 처리 (2) - 문자열 조작에 대한 기본함수 및 메서드 1 file 이니스프리 2019.12.12 162
14 6. 리스트와 관련된 기본함수 및 메서드 7 file 이니스프리 2019.12.10 200
13 3. 문자열 처리 (1) - 문자열 접근 및 검색방법 4 file 이니스프리 2019.12.09 755
» [Selenium] Requests의 session을 Selenium으로 보내기 file 이니스프리 2019.12.07 257
11 1. 반복문 (1) - while 문 5 file 이니스프리 2019.12.06 137
10 (序) Python 강좌를 시작하며... 2 file 이니스프리 2019.12.05 107
9 [Pillow] 파이썬 Pillow 라이브러리를 이용하여 이미지의 배경을 transparent하게 만들기 11 file 이니스프리 2019.08.04 608
8 [번외편 - 법률] 나무위키의 서술 중 법률용어의 사용에 있어 바로잡아야 할 부분 file 이니스프리 2019.07.17 179
7 [번외편 - 유튜브] Youtube API를 이용하거나 또는 이용하지 않고 채널ID를 추출하는 방법 1 file 이니스프리 2019.07.16 428
6 [Selenium] Selenium에서 send_keys를 막아놓은 경우 해결책 이니스프리 2019.07.04 337
5 [번외편 - 아미나] Basic Youtube Title Widget 1.0에서 처음에 엑박으로 뜨는 경우의 해결책 3 file 이니스프리 2018.12.15 453
4 [번외편 - 아미나] 아미나의 회원 이미지와 관련하여 x2 3 file 이니스프리 2018.12.10 427
3 [번외편 - 법률] 현행 저작권법 제30조(사적이용을 위한 복제)에 대하여 - 음원 다운로더의 처벌과 관련하여 6 이니스프리 2018.12.07 737
목록
Board Pagination Prev 1 ... 2 Next
/ 2
서버에 요청 중입니다. 잠시만 기다려 주십시오...