[Selenium] proxy를 사용하지 않고 개발자도구에서 Network 탭의 로그를 얻기

안녕하세요?
웹 크롤링을 하다보면 Selenium에서 개발자도구 중 '네트워크' 탭의 로그를 얻어야 하는 경우가 발생합니다.
이런 경우에는 BrowserMobProxy와 같은 proxy를 사용하는 방법이 일반적이겠죠~
하지만 proxy를 사용하지 않고서도 Geckodriver(Firefox) 및 javascript를 적절히 활용하여
네트워크 탭의 로그를 얻을 수 있는 방법이 있어요!
[code]
from selenium import webdriver
import time
driver = webdriver.Firefox() # 파폭만 가능한 방법입니다.
driver.get('URL을 입력하세요')
time.sleep(2) # 적당한 딜레이를 필요로 합니다.
logs = driver.execute_script("var performance = window.performance || window.mozPerformance || window.msPerformance || window.webkitPerformance || {}; var network = performance.getEntries() || {}; return network;")
names = [x['name'] for x in logs] # 네트워크 탭에서 name만 추출합니다.
print(names)
[/code]
만약 네트워크 탭의 name 중에서 특정 확장자만 추출하려면
[code]
names = [x['name'] for x in test if x['name'].split('.')[-1] == '원하는 확장자']
[/code]
이런 방식으로 추출할 수 있겠네요 :)
다만 브라우저에서 직접 특정 페이지를 열고 개발자도구에서 requests 개수를 확인한 결과와
위와 같은 방법으로 얻어진 dict의 길이를 비교하는 테스트를 해보면 약간의 차이가 발생하는군요 ㅎㄷㄷ
제 추측으로는 페이지 로딩 후의 async/ajax call에 대해서는 누락이 되는 것 같아요~ ㅠㅠ
결론적으로 위 방법을 사용하면 proxy를 사용하는 것만큼 완벽한 로그를 얻을 수는 없지만,
경우에 따라서는 proxy의 대안이 되기에 충분할 수도 있겠네요 :)
참고로 위 방법을 활용하여 EBS FM 온에어를 다운로드하는 스크립트가 잘 작동하는 것을 확인했네요.
그럼 즐거운 주말 되세요 ^^
게시판 목록
개발자팁
질문은 QA에서 해주시기 바랍니다.
| 번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|---|
| 5396 | 기타 |
슈퍼스타맨
|
3개월 전 | 334 | |
| 5395 | PHP |
untitled
|
5개월 전 | 807 | |
| 5394 | MySQL |
선택과집중
|
5개월 전 | 581 | |
| 5393 | 웹서버 |
techstar
|
7개월 전 | 848 | |
| 5392 |
|
1년 전 | 1205 | ||
| 5391 | 9개월 전 | 1108 | |||
| 5390 | 9개월 전 | 893 | |||
| 5389 | 8개월 전 | 863 | |||
| 5388 | 8개월 전 | 964 | |||
| 5387 | 7개월 전 | 795 | |||
| 5386 | JavaScript |
nekoieye
|
7개월 전 | 957 | |
| 5385 | 웹서버 | 7개월 전 | 977 | ||
| 5384 | JavaScript |
|
8개월 전 | 800 | |
| 5383 | 기타 | 9개월 전 | 1115 | ||
| 5382 | 기타 |
|
9개월 전 | 566 | |
| 5381 | JavaScript | 9개월 전 | 895 | ||
| 5380 | 기타 |
|
9개월 전 | 676 | |
| 5379 | JavaScript | 9개월 전 | 678 | ||
| 5378 | 10개월 전 | 1187 | |||
| 5377 | 기타 |
|
10개월 전 | 751 | |
| 5376 | jQuery |
|
10개월 전 | 560 | |
| 5375 | jQuery |
techstar
|
10개월 전 | 717 | |
| 5374 | 기타 |
|
10개월 전 | 765 | |
| 5373 | MySQL |
|
11개월 전 | 798 | |
| 5372 | 기타 |
|
11개월 전 | 1000 | |
| 5371 | JavaScript |
|
11개월 전 | 711 | |
| 5370 | JavaScript |
|
11개월 전 | 717 | |
| 5369 | PHP |
|
11개월 전 | 1228 | |
| 5368 | PHP | 11개월 전 | 1396 | ||
| 5367 | 기타 |
nekoieye
|
1년 전 | 1270 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기