728x90
반응형

* 본 포스팅은 주피터 노트북에서 진행되었다.

 

Selenium

사용자가 아닌 프로그램이 웹 브라우저를 제어할 수 있게 해주는 라이브러리이다.

서버와 클라이언트로 나누는데, 웹 브라우저 종류마다 클라이언트 프로그램이 별도로 필요하다.  

 

from selenium import webdriver
url = "https://pjt3591oo.github.io"
driver = webdriver.Chrome('chromedriver')
driver.get(url)
selected_link = driver.find_element_by_class_name('p')
print(selected_link)
print(selected_link.tag_name)
print(selected_link.text)

 

selected_selector = driver.find_element_by_css_selector('div.home div.p a')
print(selected_link)
print(selected_link.tag_name)
print(selected_link.text)

 

이제 웹을 제어해 보았다.

 

selected_selector.click() #코드를 이용하여 선택된 항목에 클릭 이벤트

이 코드를 실행하면 자동적으로 

 

위에 명시한 url로 이동한다.

 

키보드 제어

driver = webdriver.Chrome('chromedriver')
url = "https://pjt3591oo.github.io/search"
driver.get(url)
selected_tags_a = driver.find_element_by_css_selector('input#search-box')
selected_tags_a.send_keys('test')

 

자동으로 test를 입력한 search창이 뜬다.

 

 

javascript 실행

 

driver.get(url)
driver.execute_script('alert("test")')

alert 창이 뜬다.

 

url = "https://pjt3591oo.github.io/search"
search_keyword = 'db'
driver = webdriver.Chrome('chromedriver')
driver.get(url)
selected_tag_a = driver.find_element_by_css_selector('input#search-box')
selected_tag_a.send_keys(search_keyword)
selected_tag_a.send_keys(Keys.ENTER) #\UE007로 해도 엔터가 됨
soup = BeautifulSoup(driver.page_source, 'lxml')
items = soup.select('ul#search-results li')

for item in items:
    title = item.find('h3').text
    description = item.find('p').text
    print(title)
    print(description)

 

search에 db를 검색한 결과를 띄어준다. 자동으로 브라우저가 열린다.

728x90
반응형
728x90
반응형

 

* 본 포스팅은 주피터 노트북에서 진행하였다.

 

def test_generator():
    yield 1
    yield 2
    yield 3
gen = test_generator()
type(gen)

 

next(gen) #1
next(gen) #2
for i in test_generator():
    print(i)

 

def test_generator():
    print('yield 1 전')
    yield 1
    print('yield 1 과 2 사이')
    yield 2
    print('yield 2 과 3 사이')
    yield 3
    print('yield 3 후')
for i in test_generator():
    print(i)

 

yiled를 만나면 반환되지만 내용은 유지가 된다. 양보느낌

 

yiled를 보면 generator라고 생각하면 된다.

 

무한으로 generator 생성하기

def infinite_generator():
    count=0
    while True:
        count+=1
        yield count
        
gen = infinite_generator()
next(gen)

계속 누를 수록 숫자가 증가한다.

 

우리가 알고있는 리스트, Set, Dictionary의 표현식의 내부도 사실 generator 이다.

 

 

[x *x for x in [2,4,6]]
#[4, 16, 36]
print(type(x*x for x in [2,4,6]))
#<class 'generator'>

자바스크립트의 yield와 비교해보기

visual Studio Code 에서 진행하였다.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script>
        function* idMaker(){ //자바스크립트 generator
            var index=0;
            shile(index<3)
                yield index++
        }
        var gen = idMaker();
        console.log(gen.next().value)
        console.log(gen.next().value)
        console.log(gen.next().value)
    </script>
    <title>Document</title>
</head>
<body>
    
</body>
</html>

 

 

728x90
반응형
728x90
반응형

https://getbootstrap.com/docs/4.4/components/modal/

 

Modal

Use Bootstrap’s JavaScript modal plugin to add dialogs to your site for lightboxes, user notifications, or completely custom content.

getbootstrap.com

 

가져와서 붙이면 된다!

       <div class="modal" tabindex="-1" role="dialog">
            <div class="modal-dialog" role="document">
                <div class="modal-content">
                    <div class="modal-header">
                        <h5 class="modal-title">모달 제목</h5>
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                    <div class="modal-body">
                        <p>검색하시겠습니까?</p>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-secondary" data-dismiss="modal">아니요</button>
                        <button type="button" class="btn btn-primary"></button>
                    </div>
                </div>
            </div>
        </div>

위 코드를 응용해서 아래처럼 만들었다!

728x90
반응형

+ Recent posts