• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    해결됨

트위터_selenium 작동시 오류

20.02.20 23:10 작성 조회수 290

0

본 강의대로 트위터 로그인을 selenium을 이용해서 하면 잘 됩니다.

하지만, 문제가 종종 발생합니다. 아래와 같은 에러 메세지가 마지막에 뜹니다.

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="session[username_or_email]"]"}
  (Session info: chrome=80.0.3987.116)

랜덤하게 어떨때는 실행이 잘 되고, 어떨때는이런  에러 메세지가 뜹니다.

그래서 코드 중간 중간에 time.sleep(10) 정도를 넣어 주면, 확실히 에러가 없이 실행이 됩니다.

왜 이런 현상이 발생하는 건가요? 

성능이 좋은 컴퓨터로 하면 중간에 sleep 시간을 넣어주지 않아도 되나요? 아니면, selenium 자체가 가진 문제인가요? 아니면 혹시 인터넷이 느려도 이런 현상이 발생할 수도 있나요?

프로그램은 chromedriver로 하였습니다.(headless chrome 아니고..)

해결방법은 없나요? 중간에 sleep을 넣으면 시간이 너무 많이 걸립니다.

(추가 질문)

본 강의 마지막 부분에 언급하신 내용 중, 

특정 사이트는 동일한 코드를 사용할지라도 chromedriver/phantomjs/headless chrome 중에 되는 것이 있고 안되는 것이 있고, 또한 css_selector로는 찾아지는데, id 로는 찾을수 없는...등등

이러한 경우에는 미리 알수 있는 방법이 있나요? (이 사이트 경우에는 이런방식을 써야 겠구나하는...)

고급자들도 그냥 하나하나 다 해보면서 잘되는 것을 찾아 crawling을 하나요? 

아니면 페이지 소스를 보고 판단 후에 crawling을 하나요?

답변 1

답변을 작성해보세요.

1

안녕하세요. 

우선 크롬 브라우저가 가끔 업데이트되요. 해당 chromedriver는 근데 한번 설치하면, 잘 업데이트안하게 되죠. 버전에 맞는 드라이버를 설치하셨는지 확인하시면 좋을 것 같습니다. 

다음으로 아무리 버전이 동일하다해도, 운영체제에서 현재 어떤 프로그램이 동작하느냐등 PC 의 여러 요소, 또 심지어 네트워크 딜레이등 여러 예상할 수 없는 요소로 인해 브라우저에서 웹페이지 로딩이 느려질 수 있어요. 그렇기 때문에, 어떨때는 sleep을 안줘도 잘되고, 어떨때는 sleep을 줘야 잘되고 이것은 항상 다를 수 있습니다. 단지 넉넉잡고 이정도 sleep을 주면 크게 여러 요소가 있더라도 왠만한 경우에는 잘될 것이다 이렇게 설정을 하는 것이 일반적입니다. 아무리 잘되도, 당시 네트워크가 큰 딜레이가 있어서 로딩이 매우 느리다면 에러가 나는 것은 어찌보면 당연한 것이니까요.

chromedriver/phantomjs/headless chrome 이 부분중 어떤 것은 되고, 어떤 것은 안되는 경우가 가끔 보여요. 이 부분은 사이트 코드만 봐서는 바로 알기는 쉽지 않습니다. 대부분 headless chrome이 간편하니 이것으로 해보고, 사이트가 headeless chrome을 쓸 경우, HTML request header를 면밀히 체크해서, 크롤링을 최대한 막는 경우가 있습니다. 이 경우에는 부득이 그것을 뚫으려고 HTML request header를 정말 사람이 브라우저로 본것처럼 완벽하게 동일하게 하려고 노력하려면 시간이 많이 걸리기 때문에, selenium이나 phantomjs로 시도를 해봅니다. 각 케이스별로 왜안되는지를 완벽하게 확인하는 시간이 오래걸리기 때문에, 크롤링 작업을 빠르게 해야 해서, 이를 알아보는데 시간을 많이 투자하기보다는 바로 다른 기술로 시도해보는 편이 생산성이 좋기 때문입니다.

감사합니다.