기본 콘텐츠로 건너뛰기

2023의 게시물 표시

Selenium status code -9 오류 해결

/opt/homebrew/bin/python3.10 /Users/ivan/PycharmProjects/Auto_Order2/main.py Traceback (most recent call last): File "/Users/ivan/PycharmProjects/Auto_Order2/main.py", line 46, in <module> driver = webdriver.Chrome(service=service, options=options) File "/opt/homebrew/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py", line 45, in __init__ super().__init__( File "/opt/homebrew/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py", line 53, in __init__ self.service.start() File "/opt/homebrew/lib/python3.10/site-packages/selenium/webdriver/common/service.py", line 109, in start self.assert_process_still_running() File "/opt/homebrew/lib/python3.10/site-packages/selenium/webdriver/common/service.py", line 122, in assert_process_still_running raise WebDriverException(f"Service {self._path} unexpectedly exited. Status code was: {return_code}") selenium.common.exceptions.WebDriverException:

Tor를 활용해서 Python Selenium 크롤링 IP차단 우회하기

N잡러가 되기 위해 특정 사이트를 주기적으로 (1시간에 3회) 크롤링해오는 코드를 짰다. 1. 파이썬크롤링 후 웹페이지에 게시하고  2. 주문접수 폼에서 주문을 받아서 3. 받은 폼 정보를 기반으로 풀 자동화를 통해  물건을 판매를 알선하고 원 판매자로부터 수수료를 받는 부업! 헌데... 모든 코드 작성과 테스트가 끝날 무렵 나를 충격에 빠트린것이 있었으니... 바로.. IP가 차단 된 것이다. 판매자와 일종의 동업자(라고 말하고 하청업자라고 읽는다) 관계지만 그래도.. IP차단이라니.. 하지만 판매자는 판매자일 뿐 개발자가 아니기도 하고.. 이렇게 내가 편하게 수익을 가져가게 되는 것을 알게되신다면... 수수료를 낮추실 수도 있어 risky하다. 하핳... 그래서! Tor라는 솔루션을 활용해 IP차단을 우회했다. 먼저 기존 코드를 건드리기보다는 테스트를 위한 코드를 작성했는데 그 코드를 공유한다. from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager #Chrome webdriver 를 자동으로 다운받도록 추가 import os # To use Tor's SOCKS proxy server with chrome, include the socks protocol in the scheme with the --proxy-server option # PROXY = "socks5://127.0.0.1:9150" # IP:PORT or HOST:PORT torexe = os.popen( r'/opt/homebrew/bin/tor/' ) PROXY = "socks5://localhost:9050" # IP:PORT or HOST:PORT service = Service( executable_path =ChromeDrive

#2 랭체인으로 문서기반(엑셀, 구글시트, PDF) 슬랙 챗봇 만들기 Langchain Document basis Slack chatbot server like the ChatPDF (Langchain + GPT API + PDF, CSV, Google docs + Python)

  지난 시간에는 챗봇 서버를 flask로 구성하고 langchain을 메인으로 pyPDF, Pandas 를 통해 pdf파일 과 csv 파일을 토대로 대답을 하는 봇을 만들어 보았다.  그리고 그 Flask 서버에 JSON requests를 보내서 응답을 받는 것 까지 확인했다. 이번엔 pdf요약이나 csv, xlsx 파일로 질답 말고 지난번에 해보지 않았던 Google Docs를 불러와 작업하는 것을 해보겠다.   But, 나의 최종 목적지는 바로 Slack Bot! 업무자동화의 끝은 봇이 아니겠는가!!  사실, 2월에 RTM(real time message) 기반으로 코드를 작성했는데 이 API가 슬랙 정책상 바뀌었다고 한다.( https://api.slack.com/rtm )  후.. 그래서 정말 이 문제를 해결하는데 많은 시간이 걸렸던 것 같다. 일단 개인pc를 서버로 사용해야하고 pc가 꺼지면 봇도 돌지 않는 문제가 있지만 뭐.. 항상 켜놓는 pc가 있으니 작업이 완료되면 옮기면 된다는 생각으로 도전해봤다.   일단 내가 겪은 문제를 설명하기 전에 내 인터넷 환경은 이렇다. 인터넷 -  LG U+ 기가 인터넷 모뎀 -> LGU+ 공유기  - ASUS 공유기                                                                        -> RaspberryPi3 (Home Assistant docker 서버가 구동 중)                                                                        -> RaspberryPi4 (TelsaMate 용 docker 서버가 구동 중)                                                                        -> 지금 사용중인 랩탑과 같은 기기들 헌데 문제는 Home Assistant 를 구성하기 위해서.. 내가 사용중인 것들이 있었으니..

#1 Langchain Document basis chatbot server like the ChatPDF 랭체인으로 ChatPDF같은 문서기반 챗봇서버 만들기 (GPT API + PDF, CSV + Python)

 회사의 expense policy 와 Members list를 토대로 경영지원팀에게 올 수 있는 다양한 질문에 대응하는 챗봇을 만들어보고 싶었다.  처음에는 Python 과 Slack 채널 실시간 연동을 먼저 구성하고 잘 오고가는게 보이면 그 때 추가 작업을 해야겠다고 생각하며 진행하다보니,  아무래도 진행이 잘 안되기도 하고.. 최근에 www.recipegarden.live 라는 AI가 밥차려주는 웹페이지? 를 론칭하게 되어서 바쁘다보니 신경을 못썼다. 그러던 와중에 Langchain 이라는 녀석을 사용하는 유튜버의 게시물을 발견했는데, 덕분에 아주 편하게 만들어 볼 수 있게 되었다.   일단 python 모듈 구성은 이렇다. 1. OpenAI ( ChatGPT 3.5를 사용했다. ) 2. PyPDF (PDF를 읽어주는 녀석) 3. Langchain (각종 데이터를 AI에게 일목요연하게 알아서 잘 전달해주는 중간매개채.) 3. Flask (Python 으로 서버 구동) 4. Pandas (csv파일 분석을 위한 데이터 프레임) 코드 구성은 A. PDF 기능       1. 먼저 API 키를 입력해주고, PDF 파일을 읽어서 텍스트로 특정 변수에 담아준다.      2. 1에서 담아둔 텍스트는 랭체인으로 요약한다.      3. 랭체인에게 참조할 텍스트를 지정하고 질문과 함께 전달하면      4. OpenAI GPT-3.5로부터 들은 답변을 랭체인이 전달해준다. B. Dataframe 변수에 csv 파일을 pandas 모듈을 사용해서 담아준다. (변수명 df)      1. 마찬가지로 만능인 Langchain agent에게 pandas 데이터프레임을 기반으로 어떤 AI에게 어떤 데이터를 토대로 어떻게 진행할것인지 파라미터를 입력해서 전달하면 대답해준다. C. 데이터, 파라미터를 flask서버에서 process_data 라는 함수로 받아서 처리하고 출력 코드는 다음과 같다.  from flask import Flask , request , jsonify im

하이브매퍼 대쉬캠으로 운전하면서 암호화폐 채굴하기(Getting crypto currency via driving with The Hivemapper Dashcam)

 Hive Mapper 라는 스타트업(https://hivemapper.com)은  Multicoin Capital, Solana Ventures 로부터 1800만 달러로  한화 약 240억의 투자( https://bloomingbit.io/news/6917095870076813376) 도 받고 승승장구 하고 있는 스타트업의 제품이다.  240401 추가 : 일단 10개월동안 번 4만개의 허니를 지난 1월 경 솔라나로 모두 전환했고 총 2000만원정도를 벌었습니다 현재까지. 이참에 하나더 주문을 하게되었고 할인을 못받고 주문했는데 알고보니 할인코드를 찾으면 나오더군요 ㅠㅠ  다른분들이라도 제 코드로 할인 받으시라고 여기에 만들어서 공유드립니다. #hivemapper #10%DC  - 하이브매퍼 구매 링크와 10% 할인 코드 :  https://hivemapper-market.myshopify.com/discount/YEJINJEONG?ref=rBPvC5mA8DgCwJ - 10%할인 코드 : YEJINJEONG Hive mapper 와 Honey는 Observer 앱 & Observer coin(거래소 상장 되었음)과 비슷한데 옵저버는 개인과 개인, 기업이 매일의 날씨 데이터를 거래하는 플랫폼이다. 하이브 매퍼는 개인이 네이버, 다음 , 구글 로드뷰 같은걸 찍어주고 이에 대한 보상을 암호화폐로 받는거라고 보면 된다. 기업, 개인에게 데이터에 대한 중개역할을 하는게 바로 이 Hive mapper 솔루션! Observer 라는 코인은 21년 52주 최고가 0.00000097 BTC 로 한화 54.94원을 했었다. 날씨 정보는 이미 제공하는 플랫폼이 국가기업으로 있기에.. 그것보다 이렇게 사기업이 1년~2년 마다 찍어서 업데이트 하고 있는 로드뷰 정보보다는 값이 비싼 정보라고 생각이 들어 최소 60원은 가겠구나! 하는 생각으로 일단 질러봤었다.  이 글을 쓰는 지금까지 11,000 개의 토큰을 확보했으니 66만원을 벌었다고 생각하면 기분이 좋다. 구입비가 통관

(완료) Cron의 crontab 명령으로 Python code를 스케쥴대로 실행하기(Run python code by fixed interval with using Cron)

(완료)1# Python 으로 지출관리 사이트에서 모든지출 데이터 xlsx 파일 뽑아내고 Zapier로 구글시트에 업데이트하기 (Using Python, crawling and exporting company wide expenses data with Xlsx file. Update a Google sheet from this Xlsx file with Zapier.) (완료) 2# Python 으로 지출관리 사이트에서 모든지출 데이터 xlsx 파일 뽑아내고 Zapier로 구글시트에 업데이트하기 (Using Python, crawling and exporting company wide expenses data with Xlsx file. Update a Google sheet from this Xlsx file with Zapier.) 위 포스팅 내용 대로, 1. python을 통해 selenium 모듈로 crawling을 해서 xlsx 파일을 이메일로 받고 2. xlsx 파일은 Zapier 라는 노코드 툴에서 Email parser by Zapier 와 2개의 Zap 으로 처리해서 구글시트에 업데이트를 했다. 하지만 계속 실시간 데이터를 유지하는게 필요하다.  그럼 이제  추가적으로 이제 이걸 딜레이 시간 을 포함해서 정기적으로 실행되도록 해보자. 딜레이가 Zapier에서 10분 나머지 작업이 진행되는데 2분 정도로 총 12분 걸리는 것으로 확인을 했다.  그리고 나의 경우엔 월요일부터 금요일까지, 아침 7시 30분 부터 저녁 6시 00분까지 30분 간격으로 업데이트 되도록 하겠다.   딜레이를 고려한다면 매 시 48,18분에 python 코드가 돌아가면 얼추 정각에 완료되는 거군! 그러기 위해서는 cron 이라는 리눅스 스케줄러를 사용하려고 한다. 1. terminal 을 열고 sudo apt install cron 으로 crontab을 설치 2. crontab -e 명령어로 VI편집기 오픈 3. i 를 눌러서 insert mode로 전환 4. 아래 명령어

(완료) 2# Python 으로 지출관리 사이트에서 모든지출 데이터 xlsx 파일 뽑아내고 Zapier로 구글시트에 업데이트하기 (Using Python, crawling and exporting company wide expenses data with Xlsx file. Update a Google sheet from this Xlsx file with Zapier.))

우리 회사는 메인툴로 구글시트를 쓰기 때문에 구글시트에 업데이트가 필요하다.  자 그래서!  이번에는 지난번에 뽑아낸 xlsx 파일을 No-code 툴인 Zapier를 활용해서 특정 구글시트에 업데이트 해보려고 한다. 자 지피지기면 백전백승이라고 하지 않았는가 큼큼.. 메일의 html 소스를 살펴보자. 보면 다운로드 링크가 a로 시작해서 중간에 href(난 이걸 흐래프로 읽는다. ㅎㅎㅎㅎ )로 이어지는 a태그를 쓰는걸 확인할 수 있다.   이 URL을 어떻게 가져올 것인가.. 고민끝에 찾아낸 것은 바로 Zapier e-mail parser 뭐 literally 이메일 구문을 분석해주는? 뭐 그런 툴이다. 무료인지는 모르겠다. 아마 Zapier 플랜을 따라기에 라이트하게 쓴다면 무료가 아닐까 싶다. E-mail parser by Zapier(https://parser.zapier.com/)에 가입/로그인을 하고 이메일 계정을 하나 생성하면 된다. (그러면 이렇게 내 메일박스와 이메일 주소가 나타난다. 이메일 주소 편집이 귀찮아서 그 바로 위에서 살짝만 보이게 하고 잘랐다.) 그 뒤 이런식으로 URL 있는 부분을 색인처리하면 이 색인처리된 부분에 이름을 지어줄 수 있다. 나는 xlsxurl 로 지었다. 그 다음엔 이제 파이썬이 웹훅을 보내면 그걸 받아서 E-mail parser by Zapier 에 있는 봇 이메일 주소로 포워딩하는 Zap을 하나 만들어서 publish 한다. 여기서 딜레이는 10분을 줬다. 파일을 생성하고 메일이 오기까지 시간이 데이터의 양에 따라 들쑥날쑥 하기에 여유롭게 설정했다. 그다음에 새로운 Zap을 만들고 이메일 parser에서 받은 내용이 구글시트에 업데이트 되도록 한다. Parse Output 의 이름인 Xlsxurl 에 내가 원하는 URL이 들어있다. 지출 데이터가 잘 업데이트 된다! (회사 지출 정보이기에 일부러 잘라서 첨부)

(완료)1# Python 으로 지출관리 사이트에서 모든지출 데이터 xlsx 파일 뽑아내고 Zapier로 구글시트에 업데이트하기 (Using Python, crawling and exporting company wide expenses data with Xlsx file. Update a Google sheet from this Xlsx file with Zapier.)

 우리 회사는 스팬딧이라는 지출관리 프로그램을 쓴다.  회사 전체 지출을 가져오고 실시간 지출 데이터를 통해 예산 확인을 손쉽게 하려는 목적이다. 아이디어 구상은 이렇다. 1. 지출 데이터는 이메일로만 출력할 수 있다. (여러가지가 있지만 나에게 필요한 것은 구글시트에 들어가기 좋은 데이터이므로 xlsx 출력을 하고자함.)  2. 이 지출 데이터를 파이썬으로 크롤링을 하는데 Selenium 으로 로그인하고, 메일로 받는 것 까지는 여기까지 과정에서 완료. 하되 웹훅을 하나 보낸다. 어디로? Zapier로 3. Email parsor by Zapier 를 통해 이메일 본문 안의 URL의 파일을 다운받아서 구글 드라이브에 업로드하는 것  파이썬 모듈 중 핵심은 Selenium 과 requests 이다. - Selenium  모듈 : 웹 브라우저 자동화 도구로, Chrome 브라우저를 제어하여 Spendit 앱의 사용자 인터페이스를 자동으로 조작하는데 쓰임. - reuquests 모듈 : 웹훅  일단 코드부터 오픈해보자면.. 아래와 같다.

[파이썬]사내보안에 막혔을 때 proxy로 python 설치하기

회사의 단순(?) 업무를 자동화하는 것은 언제나 즐겁다. 기본 업무 중 굳이 자투리 시간을 쪼개서까지 이렇게 일하면서 즐거울 수 있는 이유가 있다면 미래의 자투리 시간들이 더 커지도록 하는 매우 희망적인(?) 작업이기 때문이다. 다만, 사내 시스템상 여러가지 제약이 많다보니(방화벽이 있다보니 파이썬 서버에 접속을 할 수가 없는것).. 설치단계에서부터 절었다..  대부분의 사람들이 terminal에서 'pip install 패키지명' 메뉴로 원하는 패키지를 다운받아 설치하지만 나는 그 단계조차 버거웠다. 그래서 너무너무너무 많은 시간을 허비했지만 여러분에겐 제가 있지 않습니까? 단 한 줄로 알려드립니다. python.exe -m pip --proxy http://168.219.61.252:8080 --trusted-host pypi.org --trusted-host files.pythonhosted.org install 패키지명 이걸로 패키지를 설치하십시오. 저를 전적으로 믿으셔야 합니다.. 설명 :  1. Python에서 패키지를 설치할 때 사용하는 pip 명령어입니다. 2. python.exe는 Python 인터프리터를 실행하는 데 사용되는 실행 파일 이름입니다. 3. -m pip는 Python 모듈에서 pip를 실행하도록 지시하는 옵션입니다. 4. --proxy http://168.219.61.252:8080는 패키지를 다운로드할 때 프록시 서버를 사용하도록 지시하는 옵션입니다. 5. --trusted-host pypi.org와 --trusted-host files.pythonhosted.org는 pip가 다운로드하는 패키지 저장소의 호스트를 신뢰할 수 있도록 지정하는 옵션입니다. 6. 마지막으로 install 패키지명은 pip를 사용하여 설치할 패키지의 이름을 지정합니다.  이 명령어 뒤로 지정하는 패키지를  프록시 서버를 사용하여 다운로드하고 설치하게 됩니다.