앞에서 설명한 셀레니움이 제대로 설치 되었다면 아래와 같은 작업을 진행 할 수 있게 된다. from selenium import webdriver url = "http://www.naver.com/" #PhantomJS 드라이버 추출 driver = webdriver.PhantomJS('C:/Program Files/phantomjs/phantomjs-2.1.1-windows/bin/phantomjs') driver.implicitly_wait(3) #드라이버를 초기화 될 때까지 3초간 대기 driver.get(url) driver.save_screenshot("naver.png") driver.quit() 다음과 같은 코드에서 driver 설치 경로는 아래의 설치 경로와 동일하다. Phantomjs를 ..
Selenium 가장 원초적인 자동화는 화면의 좌표를 기준으로 한 자동화 Selenium 도구를 이용하는 웹 자동화 윈도우즈의 자동화 작업의 자동화 웹드라이버 구성 WebDriver.Firefox : 파이어폭스 WebDriver.Chrom : 크롬 WebDriver.ie : 익스플로어 WebDriver.Opera : 오페라 WebDriver.PhantomJS : PhantomJS 브라우저 Selenium Client 설치 pip install selenium Firefox 드리아버 설치 https://github.com/mozilla/geckodriver/releases 크롬 드라이버 설치 https://sites.google.com/a/chromium.org/chromedriver/downloads D..
HTTP프로토콜은 비접속형 프로토콜이기에, 매 접속시마다 새로운 네트워크 연결이Connectionless : 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 response를 보냅니다.다. 그리고 접속을 끊는 특성이 있습니다. Stateless : 접속을 끊는 순간 클라이언트와 서버의 통신은 끝나고 상태정보는 유지하지 않는 특성이 있습니다. 쿠키 (Cookie) 쿠키는 클라이언트에 저장되는 키와 값이 들어있는 작은 데이터 파일입니다. 쿠키는 이름, 값 , 만료날짜(쿠키의 저장기간), 경로정보가 들어있습니다. 쿠키는 일정시간동안 데이터를 저장할 수 있어서 로그인 상태를 유지합니다. 쿠키는 클라이언트의 상대정보를 유저의 하드 디스크에 저장하였다가 필요할 때 참조, 재 상용합니다. 쿠키의 사..
웹에서는 두 가지의 대표적인 전송 방식이 있습니다. get방식과 post 방식입니다. import requests # http에서 사용하는 데이터 전송방식 Get, POST 방식이 있는데, 두 방식의 메소 r = requests.get("http://google.com") #get방식의 요청을 하는 경우 #POST 요청 formData = {"key1":"value1", "key2":"value2"} r = requests.post("http://sample.com", data=formData) get 방식과 포스트 방식은 이렇게 작성이 됩니다. get 방식 호출하기 #텍스트 데이터 가져오기 import requests resData = requests.get("http://api.aoikujira.co..
데이코레이터 기능은 자동완성의 기본이다. 앞에 설명했던 @staticmethod, @classmethod, @abstractmethod 또한 데코레이터다 데코레이터는 @ 붙여서 실행한다. def trace(func): def wrapper(): print(func.__name__, '함수 시작') func() print(func.__name__, '함수 끝') return wrapper def hello(): print('hello') def world(): print('world') trace_hello = trace(hello) trace_hello() trace_world = trace(world) trace_world() 이너 함수를 이용해서 실험을 해보았다. 이너함수 자체가 처음 본다면 이해하기..
코루틴은 메인루틴과 서브루틴으로 나뉘어진다. 메인루틴에서 서브루틴을 호출하면 서브루틴의 코드를 실행한 뒤 다시 메인 루틴으로 돌아온다. 이게 현재까지 써온 코드 방식이다. 그러나 코루틴은 서로 협력하는 루틴이라는 뜻이다. 메인루틴과 서브루틴처럼 종속 된 관계가 아니라 대등한 관계이며 특정 시점에 상대방의 코드를 실행한다. 코루틴은 함수가 종료되지 않은 상태에서 메인 루틴의 코드를 실행 한 뒤 다시 돌아와서 코루틴의 코드를 실행한다. 코루틴이 종료되지 않았으므로 코루틴의 내용도 계속적으로 유지된다. 코루틴에 값 보내기 def number_coroutine(): while True: x = (yield) print(x) print('coco') co = number_coroutine() next(co) co..
예외란, 코드를 실행하는 중에 발생한 에러를 뜻한다. 에러가 발생하면 코드 실행이 중단되지만, 예외처리를 하게 된다면 멈추지 않고 계속해서 진행하게 된다. try: x = int(input('나눌 숫자를 입려갛세요. : ')) y = 10 / x print(y) except: print('예외가 발생했습니다.') 0을 입력할 경우 >>> 예외가 발생했습니다. 숫자를 0으로 나누면 ZeroDivisionError 예외가 발생한다. 여기서 except에서 예외 처리를 하도록 만들었으므로 print('에ㅚ가 발생했습니다.')가 실행된다. 특정 예외만 처리하기 y = [10, 20, 30] try: index, x = map(int, input('인덱스와 나눌 숫자를 입력하세요: ').split()) print..
부모 클래스에 있는 클래스를 자기 것 처럼 사용 할수 있는 방식. 이를 상속이라고 부른다. class 기반클래스이름(기반 클래스 이름): 상속 방법은 이와 같다. class Person: def greeting(self): print('안녕하세요.') class Student(Person): def study(self): print('공부하기') james = Student() james.greeting() james.study() >>>안녕하세요. >>>공부하기 Student class에는 greeting 메서드가 없다. 그러나 Person을 상속 했기 때문에 자기것처럼 사용 할 수 있게 되었다. 이를 상속관계라고 부른다.
Class를 생성하고 나서 사용 할 때. class Person: bag = [] def put_bag(self, stuff): self.bag.append(stuff) james = Person() james.put_bag('책') maria = Person() maria.put_bag('열쇠') print(james.bag) print(maria.bag) >>>['책', '열쇠'] >>>['책', '열쇠'] 클래스 속성은 클래스에 속해 있으면 모든 인스턴스에서 공유한다. 그래서 클래스 속성에 접근 할 때 명칭은 self를 사용하기엔 좀 아쉽다. class Person: bag = [] def put_bag(self, stuff): Person.bag.append(stuff) Person.bag 라고 ..
클래스는 class에 클래스 이름을 지정하고 :(콜론)을 붙인 뒤 다음 줄 부터 def로 메서드를 작성하면 된다. 여기서 메서드는 클래스 안에 들어있는 함수를 뜻한다. 메서드의 첫 번째 매개변수는 반드시 self를 지정해야 한다. class Test: def test1(self): a = 'hello' 클래스를 생성하고 test라는 메서드를 만들었다. 여기서 self는 java의 this와 똑같다. 그러나 self는 생략이 안 되므로, 반드시 작성해야 하는 매개변수이다. 클래스 불러오기 james = 클래스() 클래스 불러오기는 다음과 같다. 변수명 = 클래스 이름을 붙인다. james안에 class가 담기게 된 것이다. 메서드 호출하기 james.greeting() 위의 예제에서 james에 클래스를 ..
함수를 포함한 스크립트 전체에 접근할 수 있는 변수를 전역 변수, 변수를 만든 함수안에서만 접근 할 수 있는 것을 지역변수라고 한다. 그래서 지역변수에서 생성된 변수는 함수 밖에서 사용 할 수 없는 것이 일반적인 사실이다. 그러나 만약 같은 이름이 있다면... 우선순위는 자기 함수 내에 있는 변수 즉, 지역변수가 우선순위이다. 이 우선 순위를 변경해보자. 함수 안에서 전역 변수 사용하기 global 전역변수 x = 10 def foo(): global x x = 20 print(x) foo() print(x) >>>20 >>>20 global을 사용할 경우 x의 변수를 지역변수에서 따로 생성하지 않는다. 기존 전역변수 x를 가져와서 전역변수 x의 값을 변경하는 모습을 볼 수 있다. 함수 안에서 함수 만들..
지금까지 def 함수를 정의해서 사용했지만, 람다 표현식으로 익명 함수를 만들 수가 있다. 기존 def 코드 def plus_ten(x): return x + 10 plus_ten(1) 람다식 코드 plus_ten = lambda x : x+ 10 print(plus_ten(1)) 람다식은 이처럼 한 줄 코딩에 도움이 된다. 람다식은 자체를 호출 할 수 있는 기능이 있다. print((lambda x : x +10)(1)) 람다식 식을 세우는 것과 자기 자신을 부르는 방법이다. 람다 표현식의 주의사항 람다 표현식 안에서는 새 변수를 만들 수가 없다. 반환값 부분은 변수 없이 식 한줄로 표현 할 수 있어야 한다. 변수가 필요한 코드일 경우에는 def로 함수를 작성하는 것이 좋다. y = 10 (lambda..