Today I Learned
날짜
2024년 10월 18일 금요일
내용
HTML에서 전체 길이를 파악하는 법
인스타그램에서 가져온 댓글 10개를 이미지로 만들어야 한다. html2image는 생성할 때 사이즈를 표시할 수 있는데, 어떤 값을 넣어야 할지 불명확했다. 댓글의 작성 길이에 따라 어찌 될지 모르니… GPT께서, selenium을 이용하라고 하신다. 기본적인 원리는
- selenium으로 서버에서 크롬창을 띄운다.
- 거기에 내가 이미지로 만드려는 HTML 파일을 올린다.
- 그 창의 길이를 측정한다.
- 이미지로 만들 때 그 값을 높이로 제공하면 딱 알맞은 이미지가 생성된다.
다. 코드가 참 더러운데 어떻게 작동은 된다…?
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from html2image import Html2Image
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
hti = Html2Image(
browser_executable="/usr/bin/chromium",
custom_flags=[
"--no-sandbox",
"--hide-scrollbars",
"--disable-dev-shm-usage",
"--disable-software-rasterizer",
"--headless=new",
],
)
options = webdriver.ChromeOptions()
options.add_argument("--headless=new") # 브라우저를 GUI 없이 실행
options.add_argument("disable-gpu")
options.add_argument("--no-sandbox") # 보안 모드 비활성화
options.add_argument(
"--disable-dev-shm-usage"
) # /dev/shm 사용 비활성화 (일부 환경에서 오류 해결)
options.add_argument(
"--disable-software-rasterizer"
) # 소프트웨어 렌더링 비활성화
options.add_argument("--log-level=3") # 로그 레벨 설정
def get_height_of_html(self, html_file_path: str):
try:
# 크롬 드라이버
driver = webdriver.Chrome(
service=Service("/usr/bin/chromedriver"), options=options
)
# 길이를 측정할 HTML 파일의 절대경로 및 URL 설정
absolute_path = os.path.abspath(html_file_path)
file_url = f"file://{absolute_path}"
# 파일 렌더링
driver.get(file_url)
# 렌더링 시간 보장
time.sleep(1)
# 높이값 측정
page_height = driver.execute_script(
"return document.body.scrollHeight"
)
# 크롬 드라이버 종료
driver.quit()
return page_height
finally:
driver.quit()
작동은 되는데 터미널 로그창에 온갖 메시지가 다 뜬다…
회고
6층 백.