다모앙 커뮤니티 운영 규칙을 확인하세요.
X

취미코딩. python selenium 웹자동 에서 뻘짓 한참 했네요. ㅠ.

페이지 정보

작성자 가랑비
작성일 2025.04.26 21:58
534 조회
2 추천

본문

python selenium 이용하면, chrome 을 열고 html 파싱하면서 여러가지 자동화를 할 수 있습니다. 특정 <div ~> 나 id 찾아서 클릭하고, 텍스트 입력하는 등 좋은 기능이 많습니다. 


기존에 비슷한 상황에서 잘 동학하던 코드가 오늘 갑자기 안 도네요. '아무것도 바뀐게 없는데' 라고 주장하지만, 무언가 바뀐게 있겠죠. 나름 chatgpt와 claude 와 google 의 도움을 열심히 받았으나, 계속 에러나네요. 그러면서 오전을 날렸습니다. 


아... 
이전 웹페이지에서 버튼을 누르면서 '새 탭'에 웹페이지가 열렸지~!!!


새로운 탭에 웹페이지가 열렸는데, 이전 페이지로 연결된 포인터로 html 파싱을 시도하였더니 계속 이상한 내용을 읽는 것이었네요.  chatGPT 에 '새 탭'에서 열렸다고 알려주었더니, 새로운 탭으로 포인터 옮기는 방법을 알려주네요. 그렇게 하였더니, 휘리릭. ㅠ. 


나의 오전이여... ㅠㅠㅠ.

2추천인 목록보기
댓글 21

가랑비님의 댓글의 댓글

대댓글 작성자 가랑비
작성일 04.27 08:43
@에놀미타님에게 답글 좋은 방법 소개 감사합니다. 조금 더 다량의 데이터를 처리해야 할 일이 생기면 사용해 보겠습니다.
아직은 소량의 데이터를 가공하는 정도여서, 아직은 chrome 을 직접 제어하면서 데이터 수집하는 selenium 이 심적으로 편하네요.

에놀미타님의 댓글의 댓글

대댓글 작성자 no_profile 에놀미타
작성일 04.27 09:05
@가랑비님에게 답글 셀레니움 같은 웹드라이버 이용한 방법이 편하긴 한데 http 크롤링에 비하면 상당히 느립니다.
브라우저 업데이트 되면 웹드라이버도 업데이트 해야 되는 불편함도 있었던 것 같아요

가랑비님의 댓글의 댓글

대댓글 작성자 가랑비
작성일 04.27 19:12
@에놀미타님에게 답글 수집할 데이터 양이 적고, 정리한 데이터를 웹페이지에 다시 올리는 것이어서 아직은 GUI 보이면서 돌아가는 것을 보여주는게 편하네요. ㅎ.
지금은 돌아간다는 것 자체에 만족하지만, 조만간 속도 불만족이 생길 것 같은데,  그때는 말씀하신 방법도 찾아보겠습니다~. 감사합니다.

고바우님의 댓글의 댓글

대댓글 작성자 고바우
작성일 04.27 08:45
@에놀미타님에게 답글 좋은 정보 감사합니다. 회사에서 파이썬으로 업무자동화 깔짝대는중입니다.

에놀미타님의 댓글의 댓글

대댓글 작성자 no_profile 에놀미타
작성일 04.27 09:20
@고바우님에게 답글 pyautoit, uiautomation, pywinauto 등등 유용한 자동화 패키지 많네요

디클님의 댓글의 댓글

대댓글 작성자 디클
작성일 04.27 18:06
@에놀미타님에게 답글 동적 컨텐츠를 로딩하는 페이지는 requests 대응하지 못합니다.
그래서 selenium 이나 playwright 같은 도구를 사용하는 겁니다.

에놀미타님의 댓글의 댓글

대댓글 작성자 no_profile 에놀미타
작성일 04.27 18:29
@디클님에게 답글 동적 로딩도 어차피 http request/response 입니다.
경우에 따라 http 헤더의 referer, user-agent 설정하거나 js로 생성된 인증키 넘겨주면 됩니다.

디클님의 댓글의 댓글

대댓글 작성자 디클
작성일 04.27 18:40
@에놀미타님에게 답글 Ajax로 데이터를 가져오는 페이지인데, Javascript 엔진을 거쳐지 않고 어떻게 동적 컨텐츠를 가지고 올까요?

https://oo.ai/s/XL5lQPwalCcSV1udw4Rl

에놀미타님의 댓글의 댓글

대댓글 작성자 no_profile 에놀미타
작성일 04.27 19:37
@디클님에게 답글 AI 맹신하면 안 됩니다.
https://daeguowl.tistory.com/89

디클님의 댓글의 댓글

대댓글 작성자 디클
작성일 04.27 20:09
@에놀미타님에게 답글 > AI 맹신하면 안 됩니다.
oo.ai 는 검색 증강 AI 이고 검색이라고 보면됩니다. 특정 페이지를 남기면 이런 반응을 보일까봐 그런건데..

돌려 드릴게요 특정 블로그를 맹신하면 안됩니다.
그리고 해당 블로그의 코드는 보셨나요?
페이지(Ajax 를 호출하는)를 호출하는 샘플이 아닌 직접 API 를 호출하는 코드입니다.

http://finance.daum.net/api/search/ranks?limit=10

```
import requests
import json            #json import하기

#custom_header을 통해 아닌 것 처럼 위장하기
custom_header = {
    'referer' : 'http://http://finance.daum.net/quotes/A048410#home',
    'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'  }

#해당 접속 사이트가 아닌 원본데이터가 오는 url 추적. network에서 가지고 온다.
url = "http://finance.daum.net/api/search/ranks?limit=10"

req = requests.get(url, headers = custom_header)    #custom_header를 사용하지 않으면 접근 불가
...
```

에놀미타님의 댓글의 댓글

대댓글 작성자 no_profile 에놀미타
작성일 04.27 21:04
@디클님에게 답글 js가 api 호출하는 게 ajax고 동적 로딩입니다.
보통은 api 요청에 대해 referer 체크 하는데 daum에서 안 할 뿐이에요

디클님의 댓글의 댓글

대댓글 작성자 디클
작성일 04.27 21:36
@에놀미타님에게 답글 > js가 api 호출하는 게 ajax고 동적 로딩입니다.
브라우저 내에서 Ajax 동작을 얘기하는게 아니잖아요
Ajax을 통해 동적컨테츠를 가지고오는 웹페이지를 크롤링하여 컨텐츠를 가지고 오는것에 대해서 얘기 중입니다. 

requests 같은 라이브러리는 JS 를 해석하고 실행하거나 DOM을 핸들링 기능이 없습니다.

브라우저가 어떤 일을 하는 어플리케이션인지, curl 명령이나 requests 라이브러리가 어떤 일은 하는지 등에 대해서 살펴 보세요.

에놀미타님의 댓글의 댓글

대댓글 작성자 no_profile 에놀미타
작성일 04.27 21:45
@디클님에게 답글 http protocol 공부하세요
동적 컨텐츠라는 게 별 거 아닙니다.

디클님의 댓글의 댓글

대댓글 작성자 디클
작성일 04.27 22:21
@에놀미타님에게 답글 마지막 한번만 글올리고 그만 하겠습니다.

https://finance.daum.net/quotes/A048410#home

이 페이지 기준으로 설명하면, 브라우저로 들어가서 소스보기 해보세요 (소스에서 "현대바이오" 를 검색해보세요, 검색이 되시는지?)
그리고 현대바이오 라는 종목명 텍스트 위에서 우클릭해서 "검사"를 눌러보세요

requests 로 가져올수 있는건 첨부미이지의 왼쪽의 소스보기와 같은 html 이고,
브라우저 (playwright) 에서 "동적으로 로딩된 HTML"가 오른쪽 "현대바이오" 라고 되어 있는 소스에요
왜 다를까요? 왜 소스보기에서는 "현대바이오"가 검색이 안되는데 왜 오른쪽의 화면(검사) 에서는 보일까요?

디클님의 댓글의 댓글

대댓글 작성자 디클
작성일 04.27 22:30
@에놀미타님에게 답글 > http protocol 공부하세요
http protocol 은 브라우저와 웹서버간의 통신 규약이고,
지금 이 쓰레드에서 논의하는 내용은 그 프로토콜아 가져온 html 의 렌더링 (자바스크립트 실행 포함) 에 관한 내용입니다.

https://ko.wikipedia.org/wiki/HTTP

PS. 공부 많이 하세요 !!

에놀미타님의 댓글의 댓글

대댓글 작성자 no_profile 에놀미타
작성일 04.27 22:42
@디클님에게 답글 curl --referer https://finance.daum.net https://finance.daum.net/api/quotes/A048410?summary=false&changeStatistics=true
api 주소만 알아내면 받아올 수 있죠(fiddler 사용법은 숙제로 남깁니다)
요청 헤더의 referer 설정하지 않으면 403 오류가 납니다.

디클님의 댓글

작성자 디클
작성일 04.27 18:08
개인적으로 selenium 구성했던 토이 프로젝트를 playwright 로 마이그레이션 했는데,
playwright 쪽이 더 직관적이고 단순해서 좋았습니다.

가랑비님의 댓글의 댓글

대댓글 작성자 가랑비
작성일 04.27 19:16
@디클님에게 답글 headless / headful 두가지를 모두 지원하고, 거의 비슷하게 동작하는 것 같네요.
headful 로 프로그램 짜고 디버깅하고, headless 로 사용하면 좋겠네요.
좋은 라이브러리 알게 되었네요. 감사합니다.

하늘아이님의 댓글

작성자 하늘아이
작성일 04.27 18:39
특별한 이유가 없다면 헤드리스 (브라우져를 보여주지 않는 것) 로 해보세요. 코드 새로 돌릴 때마다 새로운 헤드리스 브라우져를 열어서 돌릴 수 있어서 좀 더 좋아요.
개인적으로는 디클님의 말씀처럼 Playwright 이 더 편하고 좋더라고요. 다만 일부 제약이 있습니다.

가랑비님의 댓글의 댓글

대댓글 작성자 가랑비
작성일 04.27 19:19
@하늘아이님에게 답글 웹데이터 처리(라 하기엔 민망하지만)가 처음이어서, 눈에 보이는 게 쬐끔 마음이 편하긴 합니다. 몇 가지 더 해보고 익숙해지면 playwright 도 사용해봐야겠습니다. 요즘엔 라이브러리가 너무 좋은 것들이 많네요.. ㅎ.
홈으로 전체메뉴 마이메뉴 새글/새댓글
전체 검색