일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 네이버 로그인 하기
- Python
- Uipath 기초
- Uipath 설치방법
- vscode venv 설치
- 커머스API
- pywinauto
- venv 설치
- 왕초보 파이썬 실행
- pywinauto 윈도우제어
- UiPath
- 파이썬 가상환경 설치방법
- pycdc.exe
- Element is not clickable at point
- 파이썬네이버부동산
- 네이버 로그인 영수증 해결
- pycdas.exe
- uipath 입문
- 파이썬 가상환경 설치
- Selenium 셀렉터잡기
- 네이버커머스API
- pywinauto 윈도우
- 가상환경설치
- 네이버매물크롤링
- selenium
- 네이버부동산크롤링
- 날짜 정규식
- 파이썬 네이버 로그인
- 네이버 로그인 캡챠해결
- 파이썬 환경설정
- Today
- Total
목록전체 글 (384)
콘솔워크
[개요] pyinstaller는 python 코드를 배포하기 위해 실행파일 (exe)로 만들어주는 편리한 패키지이다. 패키지 다운로드 pip install pyinstaller 실행파일 생성 pyinstaller -n "파일이름" -w --onefile --clean "main.py" --icon "아이콘.ico" 패키지를 받은 후, 위 명령어를 입력하는 방식으로 자주 사용하고있다. --onefile 옵션을 추가하는 것으로 프로그램이 하나의 exe 파일에 정리되어서 배포에도 아주 편리하고, 사용자 입장에서도 좋다. 이렇게 생성한 exe 파일은 대부분의 환경에서 잘 작동하지만, 몇몇 PC에서 해당 파일을 Trojan 바이러스로 인식하여 Window Defender에서 자동으로 삭제하는 문제가 있다. 물론 ..
import logging # 로그 설정 my_log = logging my_log.basicConfig(filename="log_sample.log", level=logging.INFO) # 로그 생성 및 기록 my_log.debug('이 메시지는 디버그용 로그입니다.') my_log.info('정보성 로그 메시지입니다.') my_log.warning('경고 메시지입니다.') my_log.error('에러 메시지입니다.') my_log.critical('심각한 문제가 발생했습니다.') debug부터 차례대로 로그의 레벨 순서대로 작성하였고, 위와 같이 코드를 작성하면 로그 설정에서 입력한 logging.INFO 레벨 이상의 메시지가 기록되게 된다.
data_list = [ {"key1": "value1", "key2": "value2"}, {"key1": "value3", "key2": "value4"}, {"key1": "value5", "key2": "value6"} ] key1_list = [data["key1"] for data in data_list] print(key1_list) 리스트 컴프리헨션을 활용하면 간단하게 구현할 수 있습니다.
아래 방법을 알기 전에 내가 기존에 사용하던 방식 배열을 선언해준 후 각 값에 2를 곱해서 배열에 담기 때문에 코드가 많이 지저분하다. my_list = [1, 3, 5, 7, 9] squares = [] for x in my_list: squares.append(x * 2) print(squares) 위의 과정을 일부 생략하고 python문법으로 작성한 코드 my_list = [1, 3, 5, 7, 9] squares = [x * 2 for x in my_list] print(squares) 위의 방법을 selenium에서 다음과 같이 활용할 수 있다. # 기존의 코드 number_list = [] for number_link in number_link_list: number = number_link...
python에서의 decorator는 어떤 함수를 꾸며서 새로운 함수를 만들 때 사용할 수 있다. 아주 간단한 예시 def add_print_to(original): def wrapper(): print("함수 시작") original() print("함수 끝") return wrapper @add_print_to def print_hi(): print("안녕") print_hi() 각 함수를 작동시키기 전이나 후, 동일한 코드를 반복적으로 작성할 때, 데코레이터 함수를 사용하면 아주 유용하다. 객체지향 프로그래밍에서 이 데코레이터 함수는 아주 많이 사용된다.
문자열, 배열, 튜플, 딕셔너리에 사용할 수 있다. 1. 문자열(strings) ########### in ########### if 'p' in 'python': print(True) else: print(False) ------------------------- True ########### not in ########### if 'k' not in 'python': print(True) else: print(False) ------------------------- True 2. 리스트(list) ############## in ############## if 'a' in ['a','b','c']: print(True) else: print(False) -------------------------..
from collections import defaultdict data = [ {'claim_number': '22756365', 'order_number_list': '2102940323'}, {'claim_number': '22787274', 'order_number_list': '2133237895'}, {'claim_number': '22788336', 'order_number_list': '2134958649'}, {'claim_number': '22788336', 'order_number_list': '2134958648'}, {'claim_number': '22788336', 'order_number_list': '2134958647'}, {'claim_number': '22788336',..
from selenium import webdriver import time # WebDriver 인스턴스 생성 driver = webdriver.Chrome() # 탭 열기 driver.get("https://www.example.com") example_tab = driver.window_handles[0] time.sleep(1) driver.execute_script("window.open('https://www.google.com');") google_tab = driver.window_handles[1] time.sleep(1) driver.execute_script("window.open('https://www.yahoo.com');") yahoo_tab = driver.window_hand..
기억을 위해 간략하게 적는다. 준비물 1. pyinstaller로 빌드된 exe파일 여기서는 "app.exe"이라는 파일이라고 가정 2. pyinstxtractor 코드 설치 git clone https://github.com/extremecoders-re/pyinstxtractor.git 3. 코드 해체 python .\pyinstxtractor.py app.exe 4. app_extracted폴더내에 디컴파일 원하는 pyc 파일 찾기 ex) 저의경우 main.pyc였음. 5. uncompyle6로 디컴파일 시도 pyc 파일 to py파일로 변환 pip install uncompyle6 uncompyle6 main.pyc > main.py
from datetime import datetime, timedelta # 현재 날짜 now = datetime.now() # 30일 전 날짜 계산 delta = timedelta(days=30) previous_date = (now - delta).strftime("%Y%m%d") # 결과 출력 print(previous_date)
Django 한국 시간 설정 Django에서의 기본 Time Zone(시간 설정)은 UTC이다. UTC는 협정 세계 시간으로 국제 표준시간이라 보면 된다. 국제 표준시간과 한국 시간의 시차는 + 09:00이다. 한국 시간이 03:00이면 국제 표준 시간은 12:00 인 것이다. 시간 설정이 중요한 이유는 기본 세팅 UTC로 하게 되면 DB 저장 시에도 UTC 시간으로 저장이 되기 때문이다. ex) - models.py # app/models.py from django.db import models class TestModel(models.Model): created_at = models.DateTimeField(auto_now_add = True) # 생성 시간 updated_at = models.Dat..
article_text = "공백 포함 문자 입니다. " article_length = len(article_text.replace('\xa0', '').replace(" ", "").replace(f"\n", ""))
Python에서 15부터 역순으로 1까지 출력하는 여러가지 방법 for num in reversed(range(1, 16)): print(num) for num in range(15, 0, -1): print(num) num = 15 while num >= 1: print(num) num -= 1
my_list = [] my_list.append('가') my_list.append('나') my_list.append('다') my_list.insert(0, 'a') my_list.insert(0, 'b') my_list.insert(0, 'c') print(my_list) insert() 메소드의 앞에는 원하는 위치 index, 뒤에는 원하는 자료를 추가해주면 된다.
import attr from typing import List @attr.s(kw_only=True) class ProductAddDto: product_name: str = attr.ib(default="") price: str = attr.ib(default="") # 상품가격 discount_price: str = attr.ib(default="") # 할인가격 category_id: str = attr.ib(default="") # 카테고리 detail_imgs: List[int] = attr.ib(default=[]) # 상세이미지 terms_imgs: List[str] = attr.ib(default=[]) # 약관이미지 if __name__ == "__main__": productAddDt..
# dict list 중복 key 제거 def remove_duplicates(lst, key): seen = set() result = [] for d in lst: if d[key] not in seen: seen.add(d[key]) result.append(d) return result
작업을 위해 컴퓨터가 항상 켜져있어야 하는데, 업데이트로 인한 재부팅이 일어나는 경우에 사용할 수 있습니다. 1. 서비스(앱)을 실행합니다. 2. 서비스(앱)에서 Windows Update를 찾아 더블클릭 합니다. 3. 시작 유형을 '사용 안 함'으로 설정 후 적용을 누릅니다. 4. 상단의 '복구' 탭을 클릭 후 첫째 실패, 둘째 실패, 후속 실패 항목 모두 '동작하지 않음'으로 설정 후 적용을 누릅니다. 5. 윈도우 검색에서 '그룹 정책 편집' (gpedit.msc)을 검색 후 실행합니다. 6. '컴퓨터 구성' -> '관리 템플릿' -> 'Windows 구성 요소'를 더블 클릭 합니다. 7. 'Windows 업데이트'를 찾아 더블 클릭 합니다. 8. '자동 업데이트 구성'을 찾아 우클릭 후 '편집'을 ..
import re phone_number = '010-1234-5678' pattern = r'^01[016789]-\d{3,4}-\d{4}$' if re.search(pattern, phone_number): print("휴대전화 번호의 양식에 맞습니다.") else: print("휴대전화 번호의 양식에 맞지 않습니다.") 011을 사용하던 시절의 휴대전화번호도 인식 가능하다.
wait(driver, 70).until( EC.invisibility_of_element_located((By.CSS_SELECTOR, 'img[src="/image/admin/webpubs-load.gif"]')) ) 로딩이미지가 사라질때까지 대기하는 코드이다.
origin_num_list = ['1', '2', '3'] num_1 = '1' num_2 = '2' other_num_list = [num for num in origin_num_list if num != num_1 and num != num_2] print(other_num_list) origin_num_list = ['1', '2', '3'] num_1 = '1' num_2 = '2' other_num_list = list(set(origin_num_list) - set([num_1, num_2])) print(other_num_list) 각각 용도에 맞게 사용
github에 push 후에 해당 정보를 pull 받고 바로 서버를 재기동 하는 script를 만들었다. 리눅스에 git이 설치되어있어야하고 git 전역 config에 미리 값이 등록되어 있어야한다. touch .gitconfig git config --global user.name [계정명] git config --global user.email [계정이메일] git config --global --list git clone https://github.com/[github주소]/[appname-api] username >> 계정 입력 Password >> 계정의 Settings >> Developer settings >> Personal access tokens의 토큰값 입력 github의 action..
import clipboard data = {'id':'아이디', 'pw':'비밀번호'} clipboard.copy(str(data)) 너무 길어서 확인하기 힘든 dict형태의 자료를 다른 파일에 옮겨서 확인할 때 꽤 쓸만한 기능이다.
def switch_to_screen(self): driver: webdriver.Chrome = self.driver url = '이동할 url' # 창을 여는 javascript, 새 창에서 열리게 된다. driver.execute_script(f"window.open('{url}')") time.sleep(1) # driver.window_handles tabs = driver.window_handles # 새 창이 열리지 않았다면 작업 실패 if len(tabs) == 1: raise Exception("새 창에 진입하지 못했습니다.") # 새 창이 열렸다면 기존 창을 닫고 tab 전환 try: driver.close() except Exception as e: print(str(e)) final..
=> SSH 연결이 끊어져도 서버가 계속 실행되는 방법을 알아보았다. 명령어 실행 >> python manage.py runserver 0:8000 >> ctrl + z >> bg >> disown -h python manage.py runserver 0:8000 장고 서버를 구동시킨다. ctrl + z 해당 프로그램을 정지시키고 shell로 돌아온다. bg 명령어를 쳐서 백그라운드에서 보낸다. disown -h ssh 연결이 끊어져도 해당 프로세스가 돌아가도록 한다. 터미널 창을 종료한다. 재접속의 경우 >> sudo lsof -t -i tcp:8000 | xargs kill -9 실행 중인 프로세스 확인 >> ps -l 🐶 리눅스 프로세스 관련 개념 백 그라운드(Back Ground) 시간이 오래 ..
pyside6로만 개발하다가 이제 django를 활용해서 개발을 진행하고자한다. 기존에 개발되어있는 것을 일단 git clone 한다. 일단 django 개발은 3.11버전으로 진행할 예정이라 내 로컬에 default로 깔려있던 3.8.7 버전말고 3.11버전으로 실행해주어야 했다. py -3.11 -m pip install poetry 이렇게 하면 3.11버전의 파이썬에 poetry 설치가 된다. poetry를 처음부터 사용하려면 poetry init으로 프로젝트를 만들면 되지만 나는 기존에 있던 것을 사용할 것이다. 먼저 poetry의 env 가상환경을 3.11버전으로 맞춰준다. poetry env use C:\Users\consolework\AppData\Local\Programs\Python\Py..
pip install xmltodict 설치가 필요하다. import xmltodict import json xml_string = 'John30' # XML 문자열을 딕셔너리로 변환 data_dict = xmltodict.parse(xml_string) # 딕셔너리를 JSON 형식으로 변환 json_data = json.dumps(data_dict) print(json_data)
pyside6로 파이썬 에디터를 사용하면서 사용자가 특정 글자수를 입력하면, 글자수를 표시해주는 기능을 개발하였다. 중요한 포인트는 keyReleaseEvent에 키이벤트 처리함수를 입력해주어야한다. O keyPressedEvent에 매칭시키면 안된다. X self.input_sentence_textedit = QPlainTextEdit() self.input_sentence_textedit.keyReleaseEvent = self.on_input_sentence_textedit_keyReleaseEvent 이벤트처리는 다음과 같이 하면된다. def on_input_sentence_textedit_keyReleaseEvent(self, event): text = self.input_sentence_tex..
def get_word_count_without_empty(text:str) -> int: nospace = re.sub(' | |\t|\r|\n', '', text) return nospace 문자열을 파라미터로 넣으면 공백이 제거된 문자열을 반환한다.
프로그램을 최초 실행했을 때, 로그인화면으로 접속해서 id와 pw를 입력받고, 맞으면 다음화면, 아니면 해당 화면에 남아있게 짜봤습니다. id, pw 부분은 각자의 데이터베이스에 맞게 수정해주세요. if 1 == 1: import sys import warnings import os sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) warnings.simplefilter("ignore", UserWarning) sys.coinit_flags = 2 from tkinter import * from PySide6.QtCore import * from PySide6.QtGui import * from PySide6.QtWi..
pyqt5에서 pyside6로 변경작업을 하던중 Q테이블의 열컬럼 크기가 안맞는 경우가 있었다. tablewidget.horizontalHeader().setSectionResizeMode(1, QHeaderView.ResizeMode.Fixed) 위와 같이 "setSectionResizeMode"를 사용해서 수정하라고 나와있었는데 근본적인 해결책이 아니었다. 삽질 끝에 찾아낸 방법은, 마지막 열크기에 맞춰서 열 사이즈를 맞추는 것이다. tablewidget.horizontalHeader().setStretchLastSection(True)