취미코딩. python selenium 웹자동 에서 뻘짓 한참 했네요. ㅠ.
페이지 정보
작성자
가랑비

작성일
2025.04.26 21:58
본문
python selenium 이용하면, chrome 을 열고 html 파싱하면서 여러가지 자동화를 할 수 있습니다. 특정 <div ~> 나 id 찾아서 클릭하고, 텍스트 입력하는 등 좋은 기능이 많습니다.
기존에 비슷한 상황에서 잘 동학하던 코드가 오늘 갑자기 안 도네요. '아무것도 바뀐게 없는데' 라고 주장하지만, 무언가 바뀐게 있겠죠. 나름 chatgpt와 claude 와 google 의 도움을 열심히 받았으나, 계속 에러나네요. 그러면서 오전을 날렸습니다.
아...
이전 웹페이지에서 버튼을 누르면서 '새 탭'에 웹페이지가 열렸지~!!!
새로운 탭에 웹페이지가 열렸는데, 이전 페이지로 연결된 포인터로 html 파싱을 시도하였더니 계속 이상한 내용을 읽는 것이었네요. chatGPT 에 '새 탭'에서 열렸다고 알려주었더니, 새로운 탭으로 포인터 옮기는 방법을 알려주네요. 그렇게 하였더니, 휘리릭. ㅠ.
나의 오전이여... ㅠㅠㅠ.
2명
추천인 목록보기
댓글 21
가랑비님의 댓글의 댓글
작성일
04.27 08:43
@에놀미타님에게 답글
좋은 방법 소개 감사합니다. 조금 더 다량의 데이터를 처리해야 할 일이 생기면 사용해 보겠습니다.
아직은 소량의 데이터를 가공하는 정도여서, 아직은 chrome 을 직접 제어하면서 데이터 수집하는 selenium 이 심적으로 편하네요.
아직은 소량의 데이터를 가공하는 정도여서, 아직은 chrome 을 직접 제어하면서 데이터 수집하는 selenium 이 심적으로 편하네요.
에놀미타님의 댓글의 댓글
작성일
04.27 09:05
@가랑비님에게 답글
셀레니움 같은 웹드라이버 이용한 방법이 편하긴 한데 http 크롤링에 비하면 상당히 느립니다.
브라우저 업데이트 되면 웹드라이버도 업데이트 해야 되는 불편함도 있었던 것 같아요
브라우저 업데이트 되면 웹드라이버도 업데이트 해야 되는 불편함도 있었던 것 같아요
가랑비님의 댓글의 댓글
작성일
04.27 19:12
@에놀미타님에게 답글
수집할 데이터 양이 적고, 정리한 데이터를 웹페이지에 다시 올리는 것이어서 아직은 GUI 보이면서 돌아가는 것을 보여주는게 편하네요. ㅎ.
지금은 돌아간다는 것 자체에 만족하지만, 조만간 속도 불만족이 생길 것 같은데, 그때는 말씀하신 방법도 찾아보겠습니다~. 감사합니다.
지금은 돌아간다는 것 자체에 만족하지만, 조만간 속도 불만족이 생길 것 같은데, 그때는 말씀하신 방법도 찾아보겠습니다~. 감사합니다.
에놀미타님의 댓글의 댓글
작성일
04.27 09:20
@고바우님에게 답글
pyautoit, uiautomation, pywinauto 등등 유용한 자동화 패키지 많네요
디클님의 댓글의 댓글
작성일
04.27 18:06
@에놀미타님에게 답글
동적 컨텐츠를 로딩하는 페이지는 requests 대응하지 못합니다.
그래서 selenium 이나 playwright 같은 도구를 사용하는 겁니다.
그래서 selenium 이나 playwright 같은 도구를 사용하는 겁니다.
에놀미타님의 댓글의 댓글
작성일
04.27 18:29
@디클님에게 답글
동적 로딩도 어차피 http request/response 입니다.
경우에 따라 http 헤더의 referer, user-agent 설정하거나 js로 생성된 인증키 넘겨주면 됩니다.
경우에 따라 http 헤더의 referer, user-agent 설정하거나 js로 생성된 인증키 넘겨주면 됩니다.
디클님의 댓글의 댓글
작성일
04.27 18:40
@에놀미타님에게 답글
Ajax로 데이터를 가져오는 페이지인데, Javascript 엔진을 거쳐지 않고 어떻게 동적 컨텐츠를 가지고 올까요?
https://oo.ai/s/XL5lQPwalCcSV1udw4Rl
https://oo.ai/s/XL5lQPwalCcSV1udw4Rl
디클님의 댓글의 댓글
작성일
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를 사용하지 않으면 접근 불가
...
```
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를 사용하지 않으면 접근 불가
...
```
에놀미타님의 댓글의 댓글
작성일
04.27 21:04
@디클님에게 답글
js가 api 호출하는 게 ajax고 동적 로딩입니다.
보통은 api 요청에 대해 referer 체크 하는데 daum에서 안 할 뿐이에요
보통은 api 요청에 대해 referer 체크 하는데 daum에서 안 할 뿐이에요
디클님의 댓글의 댓글
작성일
04.27 21:36
@에놀미타님에게 답글
> js가 api 호출하는 게 ajax고 동적 로딩입니다.
브라우저 내에서 Ajax 동작을 얘기하는게 아니잖아요
Ajax을 통해 동적컨테츠를 가지고오는 웹페이지를 크롤링하여 컨텐츠를 가지고 오는것에 대해서 얘기 중입니다.
requests 같은 라이브러리는 JS 를 해석하고 실행하거나 DOM을 핸들링 기능이 없습니다.
브라우저가 어떤 일을 하는 어플리케이션인지, curl 명령이나 requests 라이브러리가 어떤 일은 하는지 등에 대해서 살펴 보세요.
브라우저 내에서 Ajax 동작을 얘기하는게 아니잖아요
Ajax을 통해 동적컨테츠를 가지고오는 웹페이지를 크롤링하여 컨텐츠를 가지고 오는것에 대해서 얘기 중입니다.
requests 같은 라이브러리는 JS 를 해석하고 실행하거나 DOM을 핸들링 기능이 없습니다.
브라우저가 어떤 일을 하는 어플리케이션인지, curl 명령이나 requests 라이브러리가 어떤 일은 하는지 등에 대해서 살펴 보세요.
디클님의 댓글의 댓글
작성일
04.27 22:21
@에놀미타님에게 답글
마지막 한번만 글올리고 그만 하겠습니다.
https://finance.daum.net/quotes/A048410#home
이 페이지 기준으로 설명하면, 브라우저로 들어가서 소스보기 해보세요 (소스에서 "현대바이오" 를 검색해보세요, 검색이 되시는지?)
그리고 현대바이오 라는 종목명 텍스트 위에서 우클릭해서 "검사"를 눌러보세요
requests 로 가져올수 있는건 첨부미이지의 왼쪽의 소스보기와 같은 html 이고,
브라우저 (playwright) 에서 "동적으로 로딩된 HTML"가 오른쪽 "현대바이오" 라고 되어 있는 소스에요
왜 다를까요? 왜 소스보기에서는 "현대바이오"가 검색이 안되는데 왜 오른쪽의 화면(검사) 에서는 보일까요?
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. 공부 많이 하세요 !!
http protocol 은 브라우저와 웹서버간의 통신 규약이고,
지금 이 쓰레드에서 논의하는 내용은 그 프로토콜아 가져온 html 의 렌더링 (자바스크립트 실행 포함) 에 관한 내용입니다.
https://ko.wikipedia.org/wiki/HTTP
PS. 공부 많이 하세요 !!
에놀미타님의 댓글의 댓글
작성일
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 오류가 납니다.
api 주소만 알아내면 받아올 수 있죠(fiddler 사용법은 숙제로 남깁니다)
요청 헤더의 referer 설정하지 않으면 403 오류가 납니다.
디클님의 댓글
작성자
디클

작성일
04.27 18:08
개인적으로 selenium 구성했던 토이 프로젝트를 playwright 로 마이그레이션 했는데,
playwright 쪽이 더 직관적이고 단순해서 좋았습니다.
playwright 쪽이 더 직관적이고 단순해서 좋았습니다.
가랑비님의 댓글의 댓글
작성일
04.27 19:16
@디클님에게 답글
headless / headful 두가지를 모두 지원하고, 거의 비슷하게 동작하는 것 같네요.
headful 로 프로그램 짜고 디버깅하고, headless 로 사용하면 좋겠네요.
좋은 라이브러리 알게 되었네요. 감사합니다.
headful 로 프로그램 짜고 디버깅하고, headless 로 사용하면 좋겠네요.
좋은 라이브러리 알게 되었네요. 감사합니다.
하늘아이님의 댓글
작성자
하늘아이

작성일
04.27 18:39
특별한 이유가 없다면 헤드리스 (브라우져를 보여주지 않는 것) 로 해보세요. 코드 새로 돌릴 때마다 새로운 헤드리스 브라우져를 열어서 돌릴 수 있어서 좀 더 좋아요.
개인적으로는 디클님의 말씀처럼 Playwright 이 더 편하고 좋더라고요. 다만 일부 제약이 있습니다.
개인적으로는 디클님의 말씀처럼 Playwright 이 더 편하고 좋더라고요. 다만 일부 제약이 있습니다.
가랑비님의 댓글의 댓글
작성일
04.27 19:19
@하늘아이님에게 답글
웹데이터 처리(라 하기엔 민망하지만)가 처음이어서, 눈에 보이는 게 쬐끔 마음이 편하긴 합니다. 몇 가지 더 해보고 익숙해지면 playwright 도 사용해봐야겠습니다. 요즘엔 라이브러리가 너무 좋은 것들이 많네요.. ㅎ.
에놀미타님의 댓글
https://contents.premium.naver.com/codetree/funcoding/contents/240107161500856oo