<jupyter_start><jupyter_text>Selenium- https://www.seleniumhq.org- 기본 사용법- 파일 업로드 다운로드    - google vision api 웹페이지에서 실습- 스크래핑    - gmarket 베스트셀러 200 아이템 정보 수집    - 네이버 메일(본인계정) 데이터 수집    - 자동화    - 워드프레스 블로그에 자동으로 댓글을 작성    - 이미지 스크린샷    - youtube 페이지로 실습(동영상 부분만 html 좌표로 자르기)    - pillow 활용 : python 이미지 처리 패키지  기본 사용법<jupyter_code># 브라우저 열기
driver = webdriver.Chrome() # browser 객체
# 페이지 이동
driver.get("http://naver.com")
# browser 윈도우 사이즈 조절
driver.set_window_size(800,600) # (가로, 세로)
# 스크롤 조절 by javascript
script = "window.scrollTo(500,300);" # (가로, 세로)
driver.execute_script(script)
# 현재 윈도우 객체를 저장
main_window = driver.current_window_handle
main_window
# 새로운 윈도우 탭열기 by java script
script = "window.open('http://google.com');"
driver.execute_script(script)
driver.current_window_handle # 아직 현재 윈도우 객체가 네이버에 있음.
# 윈도우 탭 객체확인
windows = driver.window_handles # 열려있는 윈도우가 리스트로 저장
windows # naver, google 두개가 리스트로 묶여뜸
# 현재 윈도우 탭 설정
driver.switch_to_window(windows[0]) # 0은 네이버, 1은 구글
driver.switch_to_window(main_window) # 이것도 네이버
# 페이지 새로고침 by javascript
script = "location.reload();"
driver.execute_script(script)
# alert : 확인버튼만 있음
script = "alert('data science');"
driver.execute_script(script)
alert = driver.switch_to_alert() 
alert.text
alert.accept() # 없애기
# confirm : 취소버튼, 확인버튼 모두 있음.
script = "confirm('test selenium')"
driver.execute_script(script)
confirm = driver.switch_to_alert()
confirm.text
confirm.dismiss() # 취소버튼 클릭
# confirm.accept() # 확인버튼 클릭
# input엘리먼트에 문자열 입력하기
driver.find_element_by_css_selector('#query').send_keys("패스트 캠퍼스")
# 검색버튼 클릭
driver.find_element_by_css_selector("#search_btn").click()
# 현재 윈도우 닫기
driver.close() # 탭이 하나라면 close시 브라우저도 동시에 닫힘.
# 브라우저 닫기
driver.quit()<jupyter_output><empty_output><jupyter_text>파일 업로드- google vision api 페이지 활용- vision api 페이지로 이동- iframe으로 frame을 변경- 이미지 파일을 업로드- 웹데이터와 문자열 데이터(document) 수집<jupyter_code># 구글 비전 api 페이지 이동
url = "https://cloud.google.com/vision/"
driver = webdriver.Chrome()
driver.get(url)
# 메인프레임에서 iframe 영역으로 frame을 변경
iframe = driver.find_element_by_css_selector('#vision_demo_section > iframe')
driver.switch_to_frame(iframe)
# 메인프레임으로 다시 돌아오기
# driver.switch_to_default_content()
# 파일 업로드
# 파일 경로를 쓸때는 절대경로로 사용해야 합니다.
file_path = "C:/dss/dev/TIL/web_programming/dog.png"
driver.find_element_by_css_selector("#input").send_keys(file_path)
# web 데이터를 가져오자
# web 버튼 클릭부터!
driver.find_element_by_css_selector("#webDetection").click()
# data가 여러개이므로 elements
results = driver.find_elements_by_css_selector("#card .container > .row")[:15]
# 상위 15개만 필요 & 출력
for result in results:
    print(
    result.find_element_by_css_selector('.name').text,
    result.find_element_by_css_selector('.score').text,
    )
# 문자열 데이터 가져오기(document부분 클릭)
driver.find_element_by_css_selector("#fullTextAnnotation").click()
fieldsets = driver.find_elements_by_css_selector\
(".page > .container.style-scope.vs-document > fieldset")
len(fieldsets)
documents = [] # 문장 2개가 들어갑니다.

for fieldset in fieldsets:
    words = fieldset.find_elements_by_css_selector(".container .word")
#     print(len(words))
    word_list = []
    for word in words:
        word = word.text.replace(" ","").replace("'","")
        word_list.append(word)
    documents.append(" ".join(word_list))
    
documents    
driver.quit()<jupyter_output><empty_output><jupyter_text>스크래핑- gmarket 베스트 200 데이터 수집- http://corners.gmarket.co.kr/Bestsellers<jupyter_code>from selenium import webdriver
url = "http://corners.gmarket.co.kr/Bestsellers"
driver = webdriver.Chrome()
driver.get(url)
items = driver.find_elements_by_css_selector(".best-list:nth-child(3) > ul > li")

# dict_list = []

# for item in items:
#     dict_list.append(
#     {
#         "title" : item.find_element_by_css_selector(".itemname").text,
#         "link" : item.find_element_by_css_selector(".itemname").get_attribute("href"),
#         "o-price": item.find_element_by_css_selector(".o-price").text.replace(",","")[:-1],
#         "s-price": item.find_element_by_css_selector(".s-price").text.split(" ")[0].replace(",","")[:-1], 
#     })


    
# df
len(items)
df = pd.DataFrame(dict_list)
idxs = df['o-price'] == ""
df["o-price"][idxs] = df["s-price"][idxs]
df.tail()
# 할인율 컬럼 추가(27%)
df["dc_rate"] = \
round((1 - df["s-price"].astype('int') / df["o-price"].astype('int'))* 100,0)
df["dc_rate"] = df["dc_rate"].astype('int')
df["dc_rate"] = df["dc_rate"].astype('str')
df["dc_rate"] += "%"
df.head()
driver.quit()<jupyter_output><empty_output><jupyter_text>네이버 메일 크롤링- 네이버 페이지로 이동- 아이디, 패스워드를 입력- 로그인 버튼 클릭- 메일 페이지로 이동- 메일 페이지에서 메일 데이터를 수집<jupyter_code>main_url = "http:/naver.com"
mail_url = "http:/mail.naver.com"
# 네이버 페이지로 이동
driver = webdriver.Chrome()
driver.get(main_url)
# 아이디 패스워드 입력
driver.find_element_by_css_selector("#id").send_keys("wnsgh2245")
driver.find_element_by_css_selector("#pw").send_keys("rlawnsgh0879")
# 로그인 클릭
driver.find_element_by_css_selector(".btn_login > input[type=submit]").click()
# 메일 페이지로 이동
driver.get(mail_url)
# 메일 데이터 수집
mails = driver.find_elements_by_css_selector(".mailList > li")
for mail in mails:
    name = mail.find_element_by_css_selector(".name > a").text
    title = mail.find_element_by_css_selector(".mail_title").text
    print(title)<jupyter_output>아이디스 / 화천그룹 / 메가박스 / 네이버 등 시선집중 신입채용 공고 모음!!
아직도 토익점수 발 사이즈라고? (땀) 10일만에 800 받아볼래?
(광고)상반기에 광탈한 취업전략으로 하반기 재도전해도 될까요..?
★정말 엿 먹이고싶은 회사에 다니고 있어요★
대졸초임 4,140만원! ★동국제약★ 신입 채용 외 오늘 뜬 공고&이번주 마감리스트
준호, get 50% off Academia Premium — 3 days only
(광고) 한알로 모두해결 당뇨, 혈압 걱정끝! 무료체험 신청하세요~
(광고) 결재후 최고 100% 까지 추가할인 받는, 흥정을 할 수 있는 쇼핑몰입니다. 코인 선물도 받아 가세요
[KDI E-Mail] 「금융안정보고서」(2018년 6월) 국회 제출 (한국은행)
김준호님! 싱코에 입사지원을 제의합니다.
마케팅, 비즈니스, 신입, ... - 13개 새 채용정보 📌 / 더 메인즈, 믹스앤픽스 등
마케팅, 비즈니스, 신입 - 11개 새 채용정보 📌 / 더 메인즈, 믹스앤픽스 등
누리랩, 칸그림, 무니 스튜디오, 데이터블, 멘토릿 소식
[마케팅]김준호님의 맞춤채용정보가 5건 업데이트 되었습니다.
(광고) 창업, 시작이 절반의 성공입니다. 성공창업을 위한 무점포1인창업과 창업정보 및 다양한 창업아이템 무료시식 및 무료창업설명회
{'fraction_non_alphanumeric': 0.14529041049225005, 'fraction_numerical': 0.012093340146482712, 'mean_word_length': 4.629913710450623, 'pattern_counts': {'":': 2, '<': 16, '<?xml version=': 0, '>': 25, 'https://': 2, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '573240', 'license': 'MIT', 'n_tokens_mistral': 3241, 'n_tokens_neox': 3836, 'n_words': 540, 'path': 'web_programming/selenium.ipynb', 'repo_name': 'Junhojuno/TIL', 'size': '5871'}