GOOD4ME

[Selenium] ValueError: not enough values to unpack (expected 2, got 1) 본문

해외 주식 분석 프로젝트/크롤링

[Selenium] ValueError: not enough values to unpack (expected 2, got 1)

de_youn 2022. 11. 21. 21:22
반응형

크롤링하려는 페이지

야후 파이낸스에서 크롤링 테스트를 마치고, 적재가 잘 되는지 확인하기 위해
평일마다 크롤링 모듈을 돌려보았다.

지난주 금요일(2022-11-18),
여느 날처럼 퇴근 후, 크롤링 모듈을 돌려보았는데 아래처럼 갑자기 오류가 발생한다❓❓❓

...
ValueError: not enough values to unpack (expected 2, got 1) ~
...

문제 파악

크롤링 하려는 특정 레이아웃의 내용

2개의 값을 예상하였으나, 1개의 값만 가져와서 발생한 것으로 추정되는데...
find_element_by_xpath() 함수로 특정 element의 값을 가져온 후,
특정 문자를 기준으로 split()시켜, 두 변수에 따로 담게 해놨으니 에러의 이유는 납득이 간다.

그래서 그 부분을 직접 출력해보았으나, 공백으로 출력이 된다❓❓
아니 뭐야... 혹시 몰라서 상위 클래스를 대상으로 값을 출력하도록 했는데,
"Full screen" 이라는 생판 처음 보는 문자열이 출력이 되는 것이었다....

아직 element가 로딩되지 않은 줄 알고, time.sleep()명시적/암묵적 페이지 로딩을 걸어주었으나,
이것으로도 해결되지 않았다😂😂


문제 해결

무슨 짓을 해도 해결이 안되서, webdriverChromeOptions()'--headless' 옵션을 빼고,
도대체 무슨 짓거리를 하길래 크롤링이 안될까 실험해보았다.

에?? 그런데 '--headless' 옵션을 빼니까 잘 된다❔❔
뭔가 이상해서 이 내용을 중심으로 구글링해보니 webdriverChromeOptions()에서
'user-agent' 값을 넣어준게 있었는데 여기서 'Chrome/89.x.x.x' 가 문제가 되는거 같았다.
Chrome 버전을 맞추지 않아서 발생한듯? 그런데 이전에도 버전 업데이트하고 진행할 땐, 잘 됬는데..왜????

그래서 해당 부분을 현재 webdriver 버전으로 수정한 후, 다시 실행하니
제대로 실행되는 것을 확인할 수 있었다.

def chrome_options():
    chrome_option = webdriver.ChromeOptions()
    chrome_option.add_argument('--headless')
    chrome_option.add_argument('--no-sandbox')
    chrome_option.add_argument('--disable-dev-shm-usage')
    chrome_option.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.5304.107 Safari/537.36")

    return chrome_option

 

반응형
Comments