반응형

Python3 selenium 모듈 에러 노트

모듈 개요

일반적으로 웹 크롤링을 할 경우 JS를 활용하기 위해서 많이 사용된다. 관련 서적도 있기는 하다.

배경

약 300만개의 이미지가 프로젝트에서 필요해 간단하게 크롤링을 하면서 발견한 오류이다.

개발 환경

windows 10
python 3.6.8
vs code
chromedriver 74.xx

문제점

증상

살 사용하던 중 webdriver 인스턴스에서 호출되는 것은 문제가 안되는데, 메서드로 호출된 하위 element들이나 element 중에서 find_elements_by_class_name(), find_element_by_xpath(), find_elements_by_xpath() 같은 메서드를 호출하게 되면, 프로그램이 불안정하게 종료가 되어 버리는 현상이 발견되었다.

비정상적인 종료이기 때문에 chromedriver를 headless 옵션으로 실행할 경우 프로그램이 종료가 되어도 계속 프로세스가 유지 되는 현상도 있었다.

원인

execute_script()를 호출한 이후에 해당 증상이 나타난다. 전후 관계를 보았을때 selenium 모듈내의 버그로 생각된다. 에러메시지를 추적을 하면, errorNo 까지 호출은 하지만, 비정상적인 프로그램 종료가 되는 것을 보아 예외처리 부분도 아직 안된 것으로 보인다.

(임시) 해결 방법

오류를 신고를 해야 할 듯한다(귀찮다). execute_script() 실행과정에서 문제가 있고, 그 문제가 나중에 터지는 것으로 판단이 되기 때문에 일단은 webdriver 인스턴스를 refresh()를 호출하여 갱신 시킨후에 문제가 되는 메서드를 호출을 해봤다. 결과는 잘된다.문제는 중간에 이 과정으로 인해서 시간이 더 걸리게 된다.

반응형
반응형

C++ 컴파일 에러 : cannot bind ~

에러 메시지

cannot bind 'std::basic_ostream<char>' lvalue to 'std::basic_ostream<char>&&'


발생하는 사례

 보통 cout 표준 클래스에서 자주 발견된다. 뿐만 아니라 연산자 오버라이딩이 된 클래스를 사용하다 보면 종종 발생된다.


에시1

// c++11 more than
#include <iostream>

using namespace std;

enum class COLOR
{RED, GREEN, BLUE};

int main(const int argc, const char * argv[])
{
    cout << "Color enum Red : "
        << static_cast<int>(COLOR::RED) << endl;    // No Error
    cout << "Color enum Green : " << COLOR::GREEN << endl;    // Error!
    return 0;
}




예시2

 이 예시는 보기 조금 민망하다..

// c++11 more than
#include <iostream>
#include <vector>

using namespace std;

int main(const int argc, const char * argv[])
{
    cout << "vectors : " << vector<int>{1, 2, 3} << endl;    // Error!
    return 0;
}




원인

 입출력 관련 클래스가 연산자 오버라이딩이 가능해지면서 직관적으로 코드를 작성할 수 있게 되었는데, 그러다 보니 정의 되지 않은 타입을 연산자로 받을 경우 발생되는 간단한 에러이다. 별거 아닌 에러이지만, 사람이 종종 실수를 할 수 있기 때문에 볼 수 있다. 다만, 메시지의 의미를 파악하는 연습을 하도록 하자.

 해결 방법은 연산자가 이해할 수 있는 타입으로 캐스팅을 해주거나 연산자 오버라이드를 추가 해주면 된다. 이 글을 작성하는 시점에서는 이런 실수를 방지 하기 위해 연산자 오버라이딩은 가능하면 자제하는 추세인걸로 알고 있다.


참고자료

스택오버플러워 질문



반응형

'C++' 카테고리의 다른 글

C++11 : 범위기반 for 문  (0) 2018.03.04
C++11 : STL std::array 정적배열  (0) 2018.03.04
C++ Socket : 고정 구조체  (0) 2017.08.04
C++11 : 연역적 선언 auto (입문)  (0) 2017.07.03
C++ 패턴 : 동적 싱글턴(Dynamic Singleton)  (0) 2017.06.16

+ Recent posts