I

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

· 2021-04-18 (일) 12:10:11 · 3398

image.png.jpg

 

안녕하세요?

 

웹 크롤링을 하다보면 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 온에어를 다운로드하는 스크립트가 잘 작동하는 것을 확인했네요.

 

그럼 즐거운 주말 되세요 ^^

 

|
댓글을 작성하시려면 로그인이 필요합니다.

개발자팁

5,403건

개발과 관련된 유용한 정보를 공유하세요. 질문은 QA에서 해주시기 바랍니다.

+
분류 제목 글쓴이 날짜 조회
MySQL 21-04-20 조회 2,527
기타 21-04-18 조회 3,399
MySQL 21-04-17 조회 2,696
MySQL 21-04-16 조회 2,391
MySQL 21-04-15 조회 2,199
MySQL 21-04-15 조회 2,008
OS 21-03-31 조회 5,316
웹서버 21-03-24 조회 2,872
웹서버 21-03-18 조회 2,875
웹서버 21-03-11 조회 3,107
웹서버 21-03-08 조회 2,410
웹서버 21-03-02 조회 2,863
웹서버 21-03-02 조회 3,242
MySQL 21-02-25 조회 3,663
웹서버 21-02-17 조회 8,154
웹서버 21-02-13 조회 2,266
OS 21-01-20 조회 7,445
PHP 21-01-12 조회 5,374
JavaScript 21-01-12 조회 3,022
MySQL 20-11-27 조회 4,537
MySQL 20-11-25 조회 3,731
PHP 20-11-24 조회 2,989
PHP 20-11-23 조회 3,972
PHP 20-11-19 조회 5,052
PHP 20-11-13 조회 5,293
웹서버 20-09-26 조회 7,938
기타 20-08-07 조회 5,868
MySQL 20-08-05 조회 3,924
기타 20-07-15 조회 2,978
기타 20-07-14 조회 3,575