본문 바로가기
프로그래밍/Python

[selenium]log type 'performance' not found[Solve] 해결하기

by Mr.noobiest 2023. 10. 17.

굳이 bs4나 requests를  안쓰고 selenium을 사용하는 이유는 다양하겠지만, 보통 API가 없어서 "반드시 로그인이 필요한 경우"에 로그인 과정을 인위적으로 구현하기 위해서 사용하는 경우가 많다.

이때 로그인 이후 얻게되는 cookie값들을 활용하면 로그인 이후의  모든 동작들은 requests로 처리가 가능하다.

 


문제는 requests를 하기위한 토큰 값들을 가져오기 위하여 network에서 실행된 cURL 또는 XHR 정보들을 크롤링할때

driver.get(url)
logs_raw = driver.get_log("performance")
logs = [json.loads(lr["message"])["message"] for lr in logs_raw]

 

를 주고 사용하는데, logs_raw = driver.get_log("performance") 부분에서 log type 'performance' not found와 같은 에러가 발생하는 경우가 있다.

 


 

이유는 간단하다,

"user-data-dir"가 설정되어 있지 않아서 이다.

1) 우선 디버그 모드로 driver를 실행해주자

subprocess.Popen(r'C:\Program Files\Google\Chrome\Application\chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\ChromeTEMP"')

 

or

cmd > 
C:\Program Files\Google\Chrome\Application\chrome.exe --remote-debugging-port=9222 --user-data-dir="C:/ChromeTEMP"

 

2) driver.get으로 접속 후  발생하는 network값들 가져오기

option.add_argument("--user-data-dir=C:\ChromeTEMP") 
option.set_capability('goog:loggingPrefs', {'performance': 'ALL'})


driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=option)

driver.get(url)
logs_raw = driver.get_log("performance")
logs = [json.loads(lr["message"])["message"] for lr in logs_raw]

를 실행하면 된다.

 

이후 for문과 if문을 적절히 사용하여 원하는 값을 필터링 한 후 필요한 쿠키값들(session / token 등)을 가져와 requests에 사용해주면 된다.

 

 

끝.

 

728x90
반응형