일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 네이버커머스API
- Uipath 설치방법
- 파이썬 네이버 로그인
- 파이썬 가상환경 설치
- 커머스API
- pywinauto
- pycdc.exe
- 파이썬 가상환경 설치방법
- 네이버부동산크롤링
- 가상환경설치
- 네이버 로그인 하기
- selenium
- 네이버매물크롤링
- uipath 입문
- pycdas.exe
- pywinauto 윈도우제어
- 파이썬네이버부동산
- venv 설치
- 왕초보 파이썬 실행
- Uipath 기초
- pywinauto 윈도우
- vscode venv 설치
- Selenium 셀렉터잡기
- Element is not clickable at point
- 네이버 로그인 캡챠해결
- 파이썬 환경설정
- 날짜 정규식
- Python
- 네이버 로그인 영수증 해결
- UiPath
- Today
- Total
목록프로그래밍 (351)
콘솔워크
기본 조작 # 최초 저장소 만들기 git init # 파일 지정해서 add (스테이징) git add 파일명 # 스테이징 되어있는 파일을 저장소에 저장 git commit -m '남기고 싶은 메시지' git 상태 확인 # 현재 git 상태 확인 git status # 최근 commit과 현재 로컬파일을 비교 git diff # 위의 비교를 시각적으로 표현 git difftool # 두 커밋상태를 비교 git difftool 커밋아이디1 커밋아이디2 # 현재 상황을 그래프 형식으로 보여줌 git log --oneline --all --graph 협업 시 사용 # 해당 이름으로 branch 생성 git branch 브랜치명 # 해당 브랜치로 이동 git switch 브랜치명 # 현재 브랜치와 해당 브랜치 합..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cArr1f/btrLEacOELd/oYyDGW4qkrkjD3m4pznKW0/img.png)
파이썬 공휴일 가져오려면 공공데이터 활용하는게 좋다. 왜냐하면 다른 라이브러리를 대체공휴일 같은 정보를 가져올 수 없기 때문이다. 1. 인증키 획득 2. 파이썬 패키지 설치 3. 소스코드 확인 1. 인증키 획득 일단 사용을 위해서는 공공데이터포털에서 인증키를 가져와야한다. 공공데이터포탈 회원 없는 사람은 먼저 회원가입부터하고 로그인하고 접속한다. https://www.data.go.kr/data/15012690/openapi.do 한국천문연구원_특일 정보 (천문우주정보)국경일정보, 공휴일정보, 기념일정보, 24절기정보, 잡절정보를 조회하는 서비스 입니다. 활용시 날짜, 순번, 특일정보의 분류, 공공기관 휴일 여부, 명칭을 확인할 수 있습니다. www.data.go.kr 2. 라이브러리 설치 pip ins..
target파일에 source에 있는 시트를 붙여넣는 코드이다. import win32com.client def copy_sheet(source, target): try: excel = win32com.client.Dispatch("Excel.Application") excel.Visible = False excel.DisplayAlerts = False wb1 = excel.Workbooks.Open(source) wb2 = excel.Workbooks.Open(target) source_ws = wb1.Worksheets("SourceSheet") target_ws = wb2.Worksheets("TargetSheet") source_ws.Range("A:Z").Copy(target_ws.Range(..
pyqt5 -> QLineEdit상의 텍스트를 클립보드에 복사하려고 시도했는데 위의 오류가 나오면서 불가능했다. 위 오류는 pywinauto와 PyQt5를 같이 import하면 나오는 것으로 추정된다. import sys import warnings warnings.simplefilter("ignore", UserWarning) sys.coinit_flags = 2 위 오류는 코드의 최상단부분(정확히는 pywinauto를 import하기 전)에 위의 코드를 추가해주면 된다.
# send_keys로 업로드 시도 uploader = driver.find_element(By.CSS_SELECTOR, "#file_upload") uploader.send_keys('your_file') time.sleep(1) 만약 하나의 태그에 복수개의 파일이 들어가는 multiple 속성을 갖고있다면 반드시 input 태그를 clear 해준 후에 send_keys를 사용해야한다. 그렇지 않으면 이전에 올린 파일의 기록이 남아있어서 그 이전 파일들이 한번 씩 더 업로드 된다. my_files = ['file1', 'file2', 'file3'] uploader = driver.find_element(By.CSS_SELECTOR, "#file_upload") for my_file in my_file..
def copy_stock_sheet(upload_file, download_file): try: excel = win32com.client.Dispatch("Excel.Application") excel.Visible = False wb1 = excel.Workbooks.Open(upload_file) wb2 = excel.Workbooks.Open(download_file) # ws1 = wb1.ActiveSheet # ws1.Copy(After=wb2.Worksheets(f"배선기구")) wb2.Worksheets("Sheet1").Copy(After=wb1.Worksheets("배선기구")) # wb2.Save() wb1.Worksheets("Sheet1").Name = "재고현황" wb1.Sav..
from timeit import default_timer as timer from datetime import * start_time = timer() #### 작업 진행 end_time = timer() print(f"총 {timedelta(seconds=end_time-start_time).seconds}초 소요되었습니다.") .seconds 외에도 .days .microseconds .milliseconds .minutes .hours .weeks 등의 옵션이 있어서 상황에 맞게 사용할 수 있다.
if 1 == 1: import sys import os sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) 첫 문단에 추가해주면 될 수도 있다.
60초 대기 def wait_loading(self): driver = self.driver WAIT_SECOND = 60 try_count = 0 while True: try: driver.implicitly_wait(1) driver.find_element(By.CSS_SELECTOR, ".ringHolder") try_count += 1 time.sleep(0.5) if try_count > WAIT_SECOND*2: raise Exception("로딩바없음.") except: break time.sleep에 0.5초씩 로딩바를 찾고 기다리라 했으니. 곱하기 2해준다.
git pull 할 때마다 username pasword 입력하기 귀찮아서. 일단 remote url을 변경 하면된다. git remote show origin git remote remove origin git remote add origin https://:@github.com/ownerName/projectName.git 쉘 스크립트를 처음 짜봤다. 아직 넘 부족하지만, 배포 시간을 단축하는데 꿀이다. #!/bin/sh echo "git pull and update start" cd pm2 list pm2 kill sleep 3 git pull origin main sleep 3 . venv/bin/activate sleep 1 pm2 start "gunicorn -w 4 -k uvicorn.wor..
셀레니움으로 작업 후 드라이버를 닫는 코드가 존재하지 않으면 여전히 작업관리자에 크롬드라이버가 남아서 컴퓨터의 자원을 차지하게된다. 이를 막기 위해 chromedriver.exe라는 이름이 붙은 프로세스를 강제로 종료하게 된다. try: os.system("taskkill /f /im chromedriver.exe /t") print(f"크롬드라이버 강제 종료 성공") except Exception as e: print(f"크롬드라이버 강제 종료 실패") 위의 코드에서 주의해야 할 점은 현재 활성화 중인 모든 크롬드라이버를 닫기 때문에 현재 작동중인 크롬드라이버를 사용하는 프로그램들이 모두 종료된다는 점이 있다.
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/tYkaD/btrKeuDicTo/oqmzf1SAFkXnKGwXr3aDvk/img.png)
1. 현재 프로그램이 실행되는 경로에 log 폴더가 있는지 확인하고 없으면 생성하기 # 로그 폴더 (os.getcwd() -> 현재 폴더, log -> 폴더명) self.log_path = os.path.join(os.getcwd(), "log") if os.path.isdir(self.log_path) == False: os.mkdir(self.log_path) else: print(f"이미 로그 폴더가 있습니다.") 2. 실행 기록을 남기는 log_append 함수 def log_append(self, text): today = str(datetime.now())[0:10] now = str(datetime.now())[0:-7] self.today_log = os.path.join(self.log_..
무한로딩이라는 새로운 에러종류가 생겨서 에러를 새로 정의했다. class InfiniteLoading(Exception): print("무한로딩이 발생했습니다.") 새로 정의한 에러를 raise 새로정의한에러() 방식으로 다음과 같이 전달 가능하다. def except_Test(): class InfiniteLoading(Exception): print("무한로딩이 발생했습니다.") try: time.sleep(0.2) raise InfiniteLoading("무한로딩 오류") except InfiniteLoading as e: print(e) pass except Exception as e: print(e) if __name__ == "__main__": except_Test()
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bt1A7A/btrKbtRWxWj/dHTB52jdfW3At38QKG8yR0/img.png)
30분 마다의 시간을 가져와야할 일이 생겼다. def get_all_reserve_times(): times = [] for i in range(24): st_time = str(i).zfill(2) end_time = str(i + 1).zfill(2) times.append(f"{st_time}:00 ~ {st_time}:30") times.append(f"{st_time}:30 ~ {end_time}:00") return times pyqt5 콤보박스에 넣고싶으면 이렇게 하면 된다. time_cb = QComboBox() time_cb.addItems(get_all_reserve_times())
특정 엘리먼트의 css 정보를 가져올일이 생겼다. css에만 있는 정보여서 한참 해멨다. 키워드는 value_of_css_property 이다. 예시) background_color:str = td_el.find_element(By.XPATH, 'span').value_of_css_property('background') 보통은 attribute를 가지고 오고 싶을 때는 [엘리먼트].find_element(셀렉터).get_attribute('textContent') 이렇게 하면 된다. 핵심은. 간단하다. css property 정보 가지고 오고 싶을 때는 value_of_css_property attribute 정보가지고 오고 싶을 때는 get_attribute
pip install openpyxl 설치 필요 import openpyxl # 엑셀을 저장하기 위한 workbook if os.path.isfile(f"{file_path}/result.xlsx") == True: wb = openpyxl.load_workbook(f"{file_path}/result.xlsx") sheet = wb["실행결과"] else: wb = openpyxl.Workbook() sheet = wb.active sheet.title = "실행결과" sheet.append(["주문번호", "결과"]) # order_df의 길이만큼 실행 for order_i in range(len(order_df)): order_row = order_df.iloc[order_i] order_numbe..
방법1 import pandas as pd def write_excel_to_exist_file(file_path, df, sheetname, headers): if os.path.isfile(file_path): writer = pd.ExcelWriter(file_path, engine='openpyxl', mode="a", if_sheet_exists='replace') else: writer = pd.ExcelWriter(file_path, engine='openpyxl', mode="w") df.to_excel(writer, sheet_name = sheetname, index=False, header=headers) writer.save() 방법2 from openpyxl import Workb..
class WriterThread(QThread): def __init__(self, parent, excel_file): super().__init__(parent) self.parent = parent self.excel_file = excel_file def run(self): try: self.parent.log_append(f'작업 시작') except Exception as e: print(e) def stop(self): try: self.parent.log_append(f'작업 중지') self.terminate() except Exception as e: print(e) class MainUI(QWidget): # 초기화 def __init__(self): super().__init__(..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/tn8oK/btrJREswnP1/aR1Ck69UrB2QMZ32983hGK/img.png)
방법1 - 로컬이미지 pyqt5 메인 구성 시 setWindowIcon 이라는 함수를 통해 아이콘을 전달한다. 이것의 단점은 pyinstaller로 배포 시에 이 jpg 파일이 같이 있어야 아이콘이 보여진다. 이게 싫으면 방법2로 하면 된다. if __name__ == "__main__": app = QApplication(sys.argv) ex = MainUI() ex.setWindowIcon(QIcon("assets/kakao.jpg")) sys.exit(app.exec_()) 방법2 - 이미지링크 이미지링크를 통해서 넣는 방법이 있다. from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest from PyQt5.QtGui import *..
msoffcrypto-tool 라이브러리를 설치한다. pip install msoffcrypto-tool, pandas improt 해주고 실시 df 가져오기 import msoffcrypto import io import pandas as pd def get_df_from_password_excel(excelpath, password): df = pd.DataFrame() temp = io.BytesIO() with open(excelpath, 'rb') as f: excel = msoffcrypto.OfficeFile(f) excel.load_key(password) excel.decrypt(temp) df = pd.read_excel(temp) del temp return df
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def confirm_start(self): driver = self.driver have_list = True while have_list: try: self.get_order_list() except Exception as e: print(f"주문 목록 로드 실패") have_list = False break # 목록 로딩 대기 WebDriverWait(driver, 5).until( EC.presence_of..
기존에 업데이트 했던 내용은 윈도우창을 활성화 하는 함수였는데. 윈도우 프로그램 자체가 모든 엘리먼트 들을 가지고 있어서 엘리먼트가 있는지 없는지 유무로는 실제로 창이 켜지있는지 아닌지 알 수가 없었다. 이 부분 확인을 위해서 try except 부분을 활용하여 창 활성화 여부를 체크하였다. 코드는 다음과 같다. 실제로 보이길 원하는 "윈도우창"이 있는 다이얼로그를 잡아주고. restore().set_focus() 를 실행해본다. set_focus 실행 시 오류가 발생하면 해당 창은 열려있지 않은 것으로 간주한다. self.main_dlg = self.app.window(title_re='윈도우창', visible_only=False) try: self.main_dlg.restore().set_focus..
Dataframe python pandas 라이브러리에는 dataframe이라는 자료형이 존재합니다. dataframe을 잘 가지고 노는 것이 python 작업 중 30%는 차지하는 것 같습니다. 이에 자주쓰는 dataframe 코드들에 대해서 정리하고, 여기서 자주 꺼내쓸 생각입니다. loc 데이터프레임의 행이나 컬럼에 label이나 boolean array로 접근. location의 약어로, 인간이 읽을 수 있는 label 값으로 데이터에 접근하는 것이다. loc code example 라벨이 1인 데이터 접근 df.loc[1] 라벨이 "name" 인 라벨 접근 df.loc[:, "name"] 복수개의 라벨 추리기 df = df[["name", "age", "city"]] 특정열에 포함된 문자열로 접..
try: # 새 탭 이동 driver.switch_to.window(driver.window_handles[-1]) # 새로 연 탭으로 이동 time.sleep(2) # 작업 self.work() time.sleep(2) except Exception as e: print(e) finally: # 작업 후 탭 닫기 driver.close() driver.switch_to.window(driver.window_handles[-1]) return courier_info, delivery_info driver.switch_to.window(driver.window_handles[-1]) 를 활용하면 가장 마지막쪽 탭으로 이동할 수 있다.
try: input_id = driver.find_element(By.CSS_SELECTOR, "#id") input_id.clear() input_id.send_keys(id) input_pw = driver.find_element(By.CSS_SELECTOR, "#pwd") input_pw.clear() input_pw.send_keys(pw) login_button = driver.find_element(By.CSS_SELECTOR, "button[class=button_login]") login_button.click() except TimeoutException: print(f"pass") pass except Exception as e: print(f"{id} {pw} 로그인에 실패했습니다."..
window 프로그램 자동화 시 RPA 대상 윈도우 창이 닫혀있는 경우 작업이 진행되지 않는 이슈가 발생하였다. 아래 부분을 추가해주면된다. self.main_dlg = self.app.window(title_re='*프로그램타이틀', visible_only=False) self.main_dlg.restore().set_focus() 여기서 핵심은 visible_only 옵션을 False로 주는 것과 restore().set_focus() 함수를 실행하는 것이다.
file_name = os.path.join(f"C:\excels", "file.xlsx") if os.path.isfile(file_name): os.remove(file_name) print(f"removed {file_name}") 파일이 있는지 검증하고 있다면 삭제
데이터프레임에서 순번이 필요한 경우에는 다음과 같이 넣는다. 인덱스를 순번으로 만들 수 있다. df = df.reset_index(drop=True) df = df.reset_index() df = df.rename(columns={"index": "순번"}) 1부터 시작하고 싶으면 아래 코드를 추가하면 된다. df['순번'] = df['순번'] + 1
self.df_stock = pd.read_excel( stock_excel_file, keep_default_na='', skipfooter=1, header=[0, 1]) # 컬럼이 될 행 header # axis=0