본문 바로가기

프로그래머/Python

[selenium] “Element Is Not Clickable at Point” 해결법 | 팝업창 전환 python에서 selenium으로 웹 크롤링을 할 때, “Element Is Not Clickable at Point”에러가 날 때가 있다 위의 예시 그림과 같이, 웹 페이지의 정보가 팜업형태로 나타날 때, 팝업 창 위의 element를 크롤링 할 때 나타나는 에러이다. 팝업창에 마우스를 가져다 대서, inspect element를 해봤다. 자세히 보면 팝업 창의 형태는 iframe 내에 새로운 html이 들어가 있는 모양임을 알 수 있다. # switch to iframe driver.switch_to.frame('jqxIframe1') time.sleep(3) selenium의 switch_to.frame을 이용해, 해당 frame의 id로 창을 전환한 뒤, 잠시 멈췄다가 창 내의 e.. 더보기
[윤성우의 열혈 파이썬 중급편] 34. __name __ & __main __ 출처 : 윤성우의 열혈 파이썬 : 중급 34. __name __ & __main __ __name __ # who_are_you.py def main(): print('file name: who_are_you.py') print('__name__: {0}'.format(__name__)) main() # importer.py import who_are_you print('play importer') print('__name__: {0}'.format(__name__)) # file name: who_are_you.py # __name__: who_are_you # play importer # __name_: __main__ 파이썬은 파일별로 각각 변수 name을 만든다 실행이 시작되는 스크립트 파일의 n.. 더보기
[윤성우의 열혈 파이썬 중급편] 33. 클래스 메소드와 static 메소드 33. 클래스 메소드와 static 메소드 클래스 변수에 대한 이해 class Simple: cv = 20 def __init__(self): self.iv = 10 Simple.cv # 20 s = Simple() s.cv # 20 s.iv # 20 첫 대입 연산에서 생성되는 변수를 가리켜 '인스턴스 변수'라고 한다 그리고 이는 각 객체별로 존재한다 즉, 객체에 속한 변수이다 변수를 클래스 안에도 둘 수 있다 이는 '클래스 변수'가 된다 클래스 변수는 클래스 이름을 통한 접근을 권한다 # count_instance.py class Simple: count = 0 def __init__(self): Simple.count += 1 def get_count(self): retu.. 더보기
[윤성우의 열혈 파이썬 중급편] 32. 데코레이터 출처 : 윤성우의 열혈 파이썬 : 중급 32. 데코레이터 데코레이터에 대한 이해 def deco(func): def df(): print('emoticon!') func() print('emoticon!') return df smile = deco(simile) # smile 함수 전달하고 반환 결과를 smile에 저장 smile() # 기능이 보강된 smile 함수 호출 confused = deco(confused) confused() 데코레이터 함수가, 인자로 전달된 함수에 기능을 추가하는 방식은, 기능이 추가된 새로운 함수를 만들고 이 함수를 반환하는 방식이다 전달 인자가 있는 함수 기반의 데코레이터 def adder2(n1, n2): return n1 + n2 def .. 더보기
[윤성우의 열혈 파이썬 중급편] 31. nested 함수와 closure 출처 : 윤성우의 열혈 파이썬 : 중급 31. nested 함수와 closure 함수를 만들어서 반환하는 함수 def maker(m) def inner(n) return m * n return inner f1 = maker(2) f2 = maker(3) f1(7) # 14 실제 변수 m을 참조하게 되는 순간, maker 함수의 밖이다 f2(7) # 21 파이썬의 함수는 객체이므로 다른 함수를 호출할 때 인자로도 전달이 가능하다 예제에서 정의한 inner 함수가 변수 m의 값을 어딘가에 살짝 저장해 놓고 쓴다 '안쪽에 위치한 네스티드 함수'가 자신이 필요한 변수의 값을 어딘가에 저장해 놓고 쓰는 테크닉을 가리켜 클로저라고 한다 저장된 위치 확인하기 def maker(m): def inner(.. 더보기
[윤성우의 열혈 파이썬 중급편] 30. property 출처 : 윤성우의 열혈 파이썬 : 중급 30. property 안전하게 접근하기 # natural.py class Natural: def __init__(self, n): if(n < 1): self.__n = 1 else: self.__n = n def getn(self): return self.__n def setn(self, n): if(n < 1): self.__n = 1 else: self.__n = n def main(): n = Natural(-3) print(n.getn()) n.setn(2) print(n.getn()) main() # natural2.py class Natural: def __init__(self, n): self.setn(n) def getn(self): return .. 더보기
[윤성우의 열혈 파이썬 중급편] 29. __slots __의 효과 출처 : 윤성우의 열혈 파이썬 : 중급 29. __slots __의 효과 __dict __의 단점과 그 해결책 # point_3d.py class Point3D: def __init__(sefl, x, y, z): self.x = x self.y = y self.z = z def __str__(self): return &#39;({0}, {1}, {2})&#39;.format(self.x, self.y, self.z) def main(): p1 = Point3D(1, 1, 1) p2 = Point3d(24, 17, 31) print(p1) print(p2) main() # point_slots.py class Point3D: __slots__ = (&#39;x&#39;, &#39;y&#39;, &#39;.. 더보기
[윤성우의 열혈 파이썬 중급편] 28. 정보 은닉과 __dict __ 출처 : 윤성우의 열혈 파이썬 : 중급 28. 정보 은닉과 __dict __ 속성 감추기 #person.py class Person: def __init__(self, n, a): self.name = n self.age = a def __str__(self): return &#39;{0}: {1}&#39;.format(self.name, self.age) def main(): p = Person(&#39;James&#39;, 22) print(p) p.age -= 1 # 프로그래머의 실수 print(p) main() 오류가 발생한 근본적 원인은 객체 외부에서 객체 내에 있는 변수(속성)에 직접 접근하도록 내버려 두었기 때문이다 메소드 사용 #person2.py class Person: def __ini.. 더보기
[윤성우의 열혈 파이썬 중급편] 27. 연산자 오버로딩 출처 : 윤성우의 열혈 파이썬 : 중급 27. 연산자 오버로딩 # overloading.py class Account: def __init__(self, aid, abl): self.aid = aid self.abl = abl def __add__(self, m): self.abl += m print(&#39;__add__&#39;) def __sub__(self, m): self.abl -= m print(&#39;__sub__&#39;) def __call__(self): print(&#39;__call__&#39;) return str(self.aid) + &#39;:&#39; + str(self.abl) def main(): acnt = Account(&#39;James01&#39;, 100) a.. 더보기
[윤성우의 열혈 파이썬 중급편] 26. 스페셜 메소드 출처 : 윤성우의 열혈 파이썬 : 중급 26. 스페셜 메소드 t = (1, 2, 3) len(t) # t.__len__() itr = iter(t) # itr = t.__iter__() for i in itr: print(i, end = &#39; &#39;) s = str(t) # s = t.__str__() __ name__ , __ len__ , __iter __ , __str __ 등 객체 생성 시 자동으로 호출되는 메소드 직접 그 이름을 명시하지 않고 다른 경로를 통해서 혹은 상황에 따라 자동으로 호출되는 메소드 클래스에 스페셜 메소드 정의하기 # car_special.py class Car: def __init__(self, id): self.id = id def __len__(self): r.. 더보기