[Python] webdriver.Chrome(‘chromedriver’) 에러 대처

난 단지 selenum을 학습하고 싶었을뿐인데, 예외가 발생했다.
물론, 크롬의 버전을 확인했고, 크롬드라이버도 해당 버전에 맞추어 설치했음에도 불구하고 이런 사태가 벌어졌다.

from selenium import webdriver

driver = webdriver.Chrome('chromedriver')

에러내용은 아래와 같았다.


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/-/Documents/dev/Python/webscraping_basic/13_selenium.py", line 3, in <module>
    driver = webdriver.Chrome('chromedriver')
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/chrome/webdriver.py", line 73, in __init__
    self.service.start()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/common/service.py", line 81, in start
    raise WebDriverException(
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

몇가지 해결책들이 있었지만, 우선 정품상태를 좋아하기 때문에 커맨드로 뭔가 땡겨오는 것들은 선호하지 않아서 크롬을 일단 최신버전으로 업그레이드 해보기로 했다.

다시 드라이버를 설치해보고, 증상이 동일하길래 에러문구를 자세히 보았다…
아무리봐도 ./ 패스가 맞는데도 동작을 안하길래 절대경로로 실행 시켰더니 잘 동작하였다.

왜 상대경로로 동작을 하지 않았을까?

문제는 경로 문제였음.

from selenium import webdriver

driver = webdriver.Chrome('/Users/-/Documents/dev/Python/webscraping_basic/chromedriver')  # Optional argument, if not specified will search path.

[Pyhon] scraping 작성중

파이썬으로 뭔가 데이터를 만들어서 앱을 만들려고 한다.
참 만들만한게 없다는 생각이 들어서.. 스크래핑을 학습중이다.

아래 코드는 스크래핑을 통해 파일로 저장하는 샘플 코드이다.

import requests

# res = requests.get("http://naver.com")
res = requests.get("http://google.com")

#print("응답코드:", res.status_code)

# if res.status_code == requests.codes.ok:
#     print("정상입니다.")
# else:
#     print("오류", requests.codes.ok)

# 오류 발생시 바로 종료
res.raise_for_status()
print("스크래핑 진행중")


print(len(res.text))

# 파일로 저장하기
with open("mygoogle.html", "w", encoding="utf8") as f:
    f.write(res.text)


  • 참고 자료 – 나도코딩 님의 영상 강의
  • https://www.youtube.com/watch?v=yQ20jZwDjTE&list=PLMsa_0kAjjrd8hYYCwbAuDsXZmHpqHvlV&index=4

[Python] requests를 설치후 에러날때 한가지 의심할 부분

라이브러리를 설치후 import 했음에도 에러가 반복 발생.
설치된 Python버전을 모두 바꿔봐도 안되길래 로그를 봤더니..

아나콘다를 설치해놓았던 부분에서 에러가 발생했음.

그래서 아나콘다를 날리고 났더니 정상 동작

아나콘다가 설치되어 있었다면 삭제해보시길.

무료 폰트를 찾아서..

앱을 만들려다 보니 저작권들이 거슬린다.
경제적 자유! 그것을 위한 우리의 여행은 끝이 나지 않는다..

아래 링크들은 유투버를 통해서 알게 된 링크이다.
라이센스를 잘 읽어보고, 글꼴을 사용하길 바란다.
경우에 따라 유료인것도 있어서…

1.검은고딕 https://github.com/zesstype/Black-Han…

2.에스코어드림 http://www.s-core.co.kr/who-we-are/font/

3.몬소리체 https://brunch.co.kr/@creative/32

4.Noto Sans https://fonts.google.com/specimen/Not…

5.잉크립퀴드체 http://www.thefaceshop.com/event/lipq…

6.tvn 즐거운 이야기체 http://tvn10festival.tving.com/playgr…

7.스웨거체 http://www.swagger.kr/font.html

8.주아체 http://font.woowahan.com/

눈누 https://noonnu.cc/

구글폰트 https://fonts.google.com/

  • 참고 유튜버 영상 링크
  • https://www.youtube.com/watch?v=7gOiGK83X-o

[Unity] Unity에서 iOS 빌드시 앱 종료 현상

UNITY로 게임을 만들어서 배포해보는것을 새해 소망으로 가진지 10년이 다 되어가는듯 하다…
이것저것 따라하면서 앱을 만들어 보고 테스트로 폰에 빌드를 하려고 하는데, 앱이 계속 종료된다.

메시지도 알수 없는 내용이다.

(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)
ldrb.. Loading.PreloadManager(39)

재설치후 ldrb 관련 패키지를 설치해 주면 해결이된다… 하루를 버렸다.
어딘가에 추가 설치 옵션도 있을 것으로 보인다.

[21.01.04] 경제적 자유를 향한 일기

투자는 개인이 책임을 지고 하는것입니다. 
이 글은 개인적인 기록일 뿐입니다. 투자에 참고하지 마세요.

2021년 소의 해가 밝았습니다.
새해 복 많이 받으십시오.

2020년의 투자는 실패하였습니다. 많은 생각을 했고, 많은 것을 배웠다고 생각합니다.
2021년에는 반드시 투자금의 20%를 불릴수 있는 투자를 진행하려고 합니다.

모두다 부자되세요.

[20.12.02] 경제적 자유를 향한 일기

투자는 개인이 책임을 지고 하는것입니다.
이 글은 개인적인 기록일 뿐입니다. 투자에 참고하지 마세요.

2020년 코로나가 발병하고, 소멸될것이라는 기대를 가지고, 백신이 만들어진다는 희망으로 한해가 마무리 되어 간다.
부자가 되고 싶어서, 국내 주식의 따라가기를 반복하다가 계좌가 박살나고 한국주식을 접었다.

미국 주식은 언제나 우상향이라는 생각으로 미국주식을 하기로 마음 먹었다.
지난주에 주식을 모두 처분하고, 보초병들만 남겨둔채 후퇴했다.
하지만, 내가 처분하자마자 고통받고 있던 주식들은 하늘 높은줄 모르고 신고가 행진을 했다.

하지만, 추수감사절을 앞두고 미국형들이 집에 가려고 줄을서서 코로나 검사를 받는다는 뉴스를 보고 잠시 빠져나와 있는 중이다.
언제 다시 들어가야 할지는 모르겠지만, 잃지 않는 투자를 통해서 꼭 부자가 되어 보겠다.

이 글을 보는 당신도 투자가일 것이다.
당신의 투자도 성공에 이를 수 있기를 기원한다.

@escaping

다음과 같은 블럭함수를 사용할 경우에, 에러가 발생한다.
“Escaping closure captures non-escaping parameter ‘completion'”

    func testFunc(_ completion: (String?) -> Void ) {
        DispatchQueue.global().async {
            print("global something...")
            
            DispatchQueue.main.async {
                completion("End")
            }
        }
    }

원인은 testFunc이 종료되고 나서 completion이 호출되는데, 호출이 불가하기 때문이다.
이러한 경우에 @escaping 을 선언해주면 정상 동작을 한다.

    func testFunc(_ completion: @escaping (String?) -> Void ) {
        DispatchQueue.global().async {
            print("global something...")
            
            DispatchQueue.main.async {
                completion("End")
            }
        }
    }

여기까지는 모두 알고 있는 항목이였을 것이다.
굳이 뭐 이런 글을이라며….
하지만, 오늘 배운게 하나 있는데, completion이 옵셔널로 선언된다면, default값으로 @escaping이 설정된다는 것이였다.


다음과 같이 코드 작성이 가능하다는 말이다.

    func testFunc(_ completion: ((String?) -> Void)? ) {
        DispatchQueue.global().async {
            print("global something...")
            
            DispatchQueue.main.async {
                completion?("End")
            }
        }
    }

난 분명 까먹을것이기 때문에, 기록을 남긴다.

[Python] tkinter -02. 버튼 생성

  • 하단에 참고 링크를 보면, 더 좋은 강좌들이 많다. “나도코딩”이라는 분의 강좌를 기반으로 내가 원하는대로 글을 작성할 예정이다.

윈도우 생성만 하기에는 글이 너무 아쉬워서 버튼생성부까지 글을 작성하려고 한다.
바로 바로 실행해서 화면을 볼수 있기 때문에, 너무 즐거운 코딩이다.

파일명은 원하는데로 만들되, 확장자는 .py로 만들것.
동영상에서는 윈도우로 개발하기 때문에, 배경색이 설정되지만, Mac에서는 배경색이 지정되지 않는다.

from tkinter import *

root = Tk()
# 타이틀 설정
root.title("GUI Python")

# 윈도우 크기 설정
# root.geometry("640x480")    # 가로 * 세로
# root.geometry("640x480+100+200")    # 가로 * 세로 + x좌표 + y좌표
root.geometry("640x480+800+200")    # 가로 * 세로 + x좌표 + y좌표

# 윈도우 크기 변경
# root.resizable(False, False) # x(너비), y(높이) 값 변경 허용

# 버튼 생성
btn1 = Button(root, text="버튼1")
btn1.pack()

# 버튼에 x, y축에 패딩을 넣는 방법
# 글자수만큼 늘어난다.
btn2 = Button(root, padx=50, pady=10, text="버튼2")
btn2.pack()

# 버튼에 넓이와 높이를 강제 지정하는 방법
btn4 = Button(root, width=10, height=3, text="버튼4")
btn4.pack()

# mac에서 bg color가 지원되지 않는다.
# btn5 = Button(root, fg="red", bg='yellow', text="버튼5")
# btn5.pack()

# 버튼 터치 이벤트 함수
def btncmd():
    print("버튼이 클릭되었습니다.")

# 이미지 버튼에 삽입
photo = PhotoImage(file="image/apple.png")
btn6 = Button(root, image=photo, command=btncmd)
btn6.pack()

root.mainloop() 

좀더 하고 싶지만, 오늘은 여기까지만..
궁금하다면 즐겨찾기를 해주시고, 자주 놀러와주세요.

  • 참고 링크
  • https://www.youtube.com/watch?v=bKPIcoou9N8&t=3723s