본문 바로가기
  • Tried. Failed. Logged.
728x90

파이썬84

파이썬 - 🚀 requests 속도 올리는 방법 (Session) 세션(Session) 사용하기매 요청마다 새 연결을 만들면 느립니다. requests.Session()을 쓰면 커넥션 풀링으로 훨씬 빨라집니다.import requestssession = requests.Session()for url in urls: r = session.get(url) 성능 차이 꽤 나요. 꼭 세션 쓰기! 좌: requests만 쓰기 / 우: session 쓰기 2025. 4. 10.
암호 - SSL/TLS hand shake 작동 원리 파이썬 구현 안전한 세션이 이루어지기 위해서 비대칭 키를 이용한 키 교환을 이루어지는 과정인 SSL hand shake를 파이썬으로 간단히 구현해 보았다. 유효한 ID인지 확인, RSA 키교환, 세션 키(AES) 교환이 존재로 한다. simple-ssl.py# simple-ssl.py# 간단한 SSL 프로토콜 구현import rsa, randomfrom Crypto.Cipher import AESfrom Crypto.Random import get_random_bytesclass Client: def __init__(self): self.CertList = [] # 클라이언트가 가지고 있는 인증서 리스트(신뢰할 수 있는 CA의 인증서) self.CertList.append("www.va.. 2025. 4. 10.
파이썬 - 인터프리터에서 컴파일로 속도 성능 향상(Nuitka) 설명: Nuitka는 Python 코드를 C/C++ 코드로 변환해 실행 가능한 바이너리 파일을 생성하는 Python 컴파일러입니다. Python 인터프리터 방식의 한계를 보완하고, 실행 속도를 향상시키며, 코드를 최적화하는 데 도움을 줍니다. 또한, Python 코드를 배포 가능한 형태로 패키징할 수 있어 소스 코드 보호 및 의존성 관리를 간편하게 할 수 있습니다.  파이썬은 인터프리터로 처리를 하다 보니 다른 바이너리 파일들에 비해 속도면에서는 부족할 수 있다. 속도가 부족하면 처리량도 뒤떨어지고 결국 성능이 뒤쳐지게 된다. 이를 해결하기 위해 Nuitka를 사용해 파이썬 파일을 컴파일하여 실행 속도를 향상 시킬 수 있다. 대신 컴파일 하는데 컴퓨터 성능에 따라서 시간이 오래 소요할 수 있다.  또한 .. 2025. 4. 10.
셀레니움 - 크롬드라이버 자동 설치 모듈(webdriver-manager) 모듈 설치 pip install webdriver-manager  사용 예시 # selenium 3from selenium import webdriverfrom webdriver_manager.chrome import ChromeDriverManagerdriver = webdriver.Chrome(ChromeDriverManager().install()) # selenium 4from selenium import webdriverfrom selenium.webdriver.chrome.service import Service as ChromeServicefrom webdriver_manager.chrome import ChromeDriverManagerdriver = webdriver.Chrome(serv.. 2025. 3. 19.
파이썬 - pip "error: externally-managed-environment" 문제 해결 sudo rm /usr/lib/python3.11/EXTERNALLY-MANAGED 출처: https://velog.io/@dongju101/error-externally-managed-environment-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0 error: externally-managed-environment 문제 해결다음 명령어 입력시 해결 가능velog.io 2024. 8. 10.
셀레니움 - 요소 가운데로 스크롤하기 element = driver.find_element_by_xpath('//*[text()="사용감 없음"]')scrollElementIntoMiddle = "var viewPortHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);"\ + "var elementTop = arguments[0].getBoundingClientRect().top;"\ + "window.scrollBy(0, elementTop-(viewPortHeight/2));";\driver.execute.. 2024. 5. 23.
PIL - 이미지 회전 현상 해결 방법 원인 및 해결 EXIF의 방향 태그가 원인, 해결 방안으로 ImageOps.exif_transpose()로 EXIF 방향 태그 제거 from PIL import Image, ImageOps im = Image.open("file.jpg") im = ImageOps.exif_transpose(im) https://stackoverflow.com/questions/4228530/pil-thumbnail-is-rotating-my-image https://pillow.readthedocs.io/en/latest/reference/ImageOps.html#PIL.ImageOps.exif_transpose https://yjs-program.tistory.com/272 https://github.com/pytho.. 2024. 4. 20.
네트워크 보안 - NAC 우회 관련 Cheat Sheet https://redteam.coffee/woot/nac-bypass-cheatsheet NAC Bypass Cheatsheet | Ikigai This post lists down a few of the techniques which can be used to bypass Network Access Control solutions(NAC). redteam.coffee macchanger macchanger -m XX:XX:XX:XX:XX:XX randommac.py #!/usr/bin/python import subprocess import sys import threading import time class MyThread (threading.Thread): die = False def __init_.. 2024. 3. 28.
셀레니움 - 새 탭 열기 & 새 창 열기 driver.switch_to.new_window('tab') driver.switch_to.new_window('window') 2023. 10. 5.
파이썬 - url로부터 이미지 다운로드(urllib.request) import urllib.request urllib.request.urlretrieve(img_url, f'./cache/images/' + str(idx) + '.png') 2023. 8. 25.
알고리즘 - 파일 1회 최대 업로드 제한 횟수 분할 해서 보내기 예시) 1. 한 번에 올릴 수 있는 이미지가 20개라면 -> 이미지를 20개씩 나누어서 올리기 2. 이미지가 43개라면 20개 업로드 나머지 20개 업로드 나머지 3개 업로드 imgs = [i for i in range(1, 43+1)] UPLOAD_LIMIT_COUNT = 20 siz_start = 0 for i in range(1,100): siz_end = UPLOAD_LIMIT_COUNT*i if len(imgs[ siz_start : ]) > UPLOAD_LIMIT_COUNT: print("divide upload", imgs[ siz_start : siz_end ], len(imgs[ siz_start : siz_end ])) siz_start+=UPLOAD_LIMIT_COUNT else: p.. 2023. 8. 17.
알고리즘 - 연속적인 수열인지 확인하기 예시) 1~8개의 숫자로 이루어진 체크 박스가 있으며 체크를 할 때는 연속적인 숫자 나열이어야 함 (올바른 예시: 1, 2, 3, 4) (틀린 예시: 1, 3, 4) def checkSerialCheckBox(): time_checkBoxes = [] if checkbox_time1_var.get() == "on": time_checkBoxes.append(1) if checkbox_time2_var.get() == "on": time_checkBoxes.append(2) if checkbox_time3_var.get() == "on": time_checkBoxes.append(3) if checkbox_time4_var.get() == "on": time_checkBoxes.append(4) if ch.. 2023. 8. 15.
728x90