264 lines
22 KiB
Plaintext
264 lines
22 KiB
Plaintext
이미지 번역 외 추가기능을 구현하려 해.
|
|
|
|
아래 추가정보를 참고해서만들어줘.
|
|
|
|
1. 단일옵션인지 아닌지를 먼저 판단해.
|
|
|
|
2. 단일옵션이 아닐경우 전체옵션체크박스의 상태를 확인해.
|
|
전체옵션 체크박스가 일부만 체크되어 있다면 해당상품은 옵션수정이 완료된 상품이기 때문에 옵션수정을 pass해야해.
|
|
|
|
3. 가격 낮은 순 정렬버튼을 1회 클릭
|
|
|
|
4. 단일 옵션이 아니면서, 전체 옵션체크박스가 전체체크가 되어 있다면 아래의 정보들을 참고해서 옵션정보를 수집해서 옵션 info 딕셔너리를 만들어.
|
|
총 옵션갯수, 각 옵션의 원본옵션명, 각옵션의 가격범위, 옵션이미지 존재 여부 등
|
|
|
|
5.수집된 옵션명을 vertexAI객체의 translate_options 메서드를 이용해 번역된 옵션값을 딕셔너리로 리턴받아와서 옵션info에 업데이트 해줘.
|
|
|
|
6. 번역된 옵션명을 각각의 옵션명 편집칸에 입력해줘.
|
|
|
|
7. 옵션이 3개 이상이면 가장 낮은 옵션을 1개 체크해제, 2개 이하라면 이 과정을 수행하지 않아.
|
|
|
|
8. 선택된 총 옵션갯수가 10개이상이 되지 않도록 10개 이상이면 나머지 옵션들을 체크해제해야해.
|
|
|
|
9. 옵션편집이 완료되면 저장 버튼을 클릭해야해.
|
|
|
|
|
|
|
|
|
|
전체 옵션체크박스의 요소에서 모든옵션이 체크된 상태일 경우 총 옵션의 갯수를 가져올수 있어.
|
|
|
|
가격 낮은 순 버튼 요소
|
|
<button type="button" class="ant-btn css-1li46mu ant-btn-default"><span>가격 낮은 순 </span><span role="img" aria-label="arrow-down" class="anticon anticon-arrow-down"><svg viewBox="64 64 896 896" focusable="false" data-icon="arrow-down" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0048.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z"></path></svg></span></button>
|
|
가격 낮은 순 버튼 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-bklklh.iBKTwf > div.ant-row.ant-row-space-between.ant-row-middle.css-1li46mu > div:nth-child(2) > div > button:nth-child(3)
|
|
|
|
A-Z버튼 요소
|
|
<button type="button" class="ant-btn css-1li46mu ant-btn-default"><span>A-Z</span></button>
|
|
A-Z버튼 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-bklklh.iBKTwf > div:nth-child(1) > div:nth-child(1) > div > div:nth-child(1) > button
|
|
|
|
전체 체크박스의 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-bklklh.iBKTwf > div.ant-row.ant-row-space-between.ant-row-middle.css-1li46mu > div:nth-child(1) > label > span.ant-checkbox.ant-checkbox-indeterminate.ant-wave-target.css-1li46mu > input
|
|
|
|
전체 체크박스가 모든옵션이 선택된 상태일 경우 요소
|
|
<label class="ant-checkbox-wrapper ant-checkbox-wrapper-checked css-1li46mu"><span class="ant-checkbox ant-wave-target css-1li46mu ant-checkbox-checked"><input class="ant-checkbox-input" type="checkbox"><span class="ant-checkbox-inner"></span></span><span>선택 8개 옵션명</span></label>
|
|
전체 체크박스가 모든옵션이 선택된 상태일 경우 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-bklklh.iBKTwf > div.ant-row.ant-row-space-between.ant-row-middle.css-1li46mu > div:nth-child(1) > label
|
|
|
|
전체 체크박스가 일부옵션이 선택된 상태일 경우 요소
|
|
<label class="ant-checkbox-wrapper css-1li46mu"><span class="ant-checkbox ant-checkbox-indeterminate ant-wave-target css-1li46mu"><input class="ant-checkbox-input" type="checkbox" aria-checked="mixed"><span class="ant-checkbox-inner"></span></span><span>선택 6개 옵션명</span></label>
|
|
전체 체크박스가 일부옵션이 선택된 상태일 경우 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-bklklh.iBKTwf > div.ant-row.ant-row-space-between.ant-row-middle.css-1li46mu > div:nth-child(1) > label
|
|
|
|
전체 체크박스가 모든옵션이 선택되지 않은 상태일 경우 요소
|
|
<label class="ant-checkbox-wrapper css-1li46mu"><span class="ant-checkbox ant-checkbox-indeterminate ant-wave-target css-1li46mu"><input class="ant-checkbox-input" type="checkbox" aria-checked="mixed"><span class="ant-checkbox-inner"></span></span><span>선택 6개 옵션명</span></label>
|
|
전체 체크박스가 모든옵션이 선택되지 않은 상태일 경우 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-bklklh.iBKTwf > div.ant-row.ant-row-space-between.ant-row-middle.css-1li46mu > div:nth-child(1) > label
|
|
|
|
|
|
1번옵션 체크박스 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(1) > div > div:nth-child(1) > div > div:nth-child(1) > label > span > input
|
|
1번옵션의 원본옵션명 요소
|
|
<span class="sc-drFUgV dIaFuk Body3Regular14 CharacterSecondary45">8吨力机器整套+一字刀头 送脚踏开关</span>
|
|
1번옵션의 원본옵션명 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(1) > div > div:nth-child(1) > div > div:nth-child(3) > div:nth-child(3) > span
|
|
1번옵션의 옵션명편집칸 요소
|
|
<input class="ant-input css-1li46mu" type="text" value="힘 기계 완전한 세트 + 풋 스위치를 보내는 배열된 절단기 머리의 8 톤">
|
|
1번옵션의 옵션명편집칸 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(1) > div > div:nth-child(1) > div > div:nth-child(3) > div:nth-child(2) > div:nth-child(1) > span > input
|
|
1번옵션의 가격범위 요소
|
|
<sup data-show="true" class="ant-scroll-number ant-badge-count ant-badge-multiple-words" title="534,100원 - 534,100원">534,100원 - 534,100원</sup>
|
|
1번옵션의 가격범위 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(1) > div > div:nth-child(1) > div > div:nth-child(3) > div:nth-child(1) > div:nth-child(2) > button > span > sup
|
|
|
|
|
|
2번옵션 체크박스 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(2) > div > div:nth-child(1) > div > div:nth-child(1) > label > span > input
|
|
2번옵션의 원본옵션명 요소
|
|
<span class="sc-drFUgV dIaFuk Body3Regular14 CharacterSecondary45">8吨力机器整套+一字刀头+十字刀头 送脚踏开关</span>
|
|
2번옵션의 원본옵션명 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(2) > div > div:nth-child(1) > div > div:nth-child(3) > div:nth-child(3) > span
|
|
2번옵션의 옵션명편집칸 요소
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(2) > div > div:nth-child(1) > div > div:nth-child(3) > div:nth-child(2) > div:nth-child(1) > span > input
|
|
2번옵션의 옵션명편집칸 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(2) > div > div:nth-child(1) > div > div:nth-child(3) > div:nth-child(2) > div:nth-child(1) > span > input
|
|
2번옵션의 가격범위 요소
|
|
<sup data-show="true" class="ant-scroll-number ant-badge-count ant-badge-multiple-words" title="559,000원 - 559,000원">559,000원 - 559,000원</sup>
|
|
2번옵션의 가격범위 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(2) > div > div:nth-child(1) > div > div:nth-child(3) > div:nth-child(1) > div:nth-child(2) > button > span > sup
|
|
|
|
3번옵션 체크박스 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(3) > div > div:nth-child(1) > div > div:nth-child(1) > label > span > input
|
|
|
|
3번옵션의 원본옵션명 요소
|
|
<span class="sc-drFUgV dIaFuk Body3Regular14 CharacterSecondary45">8吨力机器整套+一字刀头+加强脚踏开关</span>
|
|
3번옵션의 원본옵션명 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(3) > div > div:nth-child(1) > div > div:nth-child(3) > div:nth-child(3) > span
|
|
3번옵션의 옵션명편집칸 요소
|
|
<input class="ant-input css-1li46mu" type="text" value="힘 기계 완전한 세트 + 배열된 절단기 머리 + 강화된 발 스위치의 8 톤">
|
|
3번옵션의 옵션명편집칸 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(3) > div > div:nth-child(1) > div > div:nth-child(3) > div:nth-child(2) > div:nth-child(1) > span > input
|
|
3번옵션의 가격범위 요소
|
|
<sup data-show="true" class="ant-scroll-number ant-badge-count ant-badge-multiple-words" title="584,000원 - 584,000원">584,000원 - 584,000원</sup>
|
|
3번옵션의 가격범위 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(3) > div > div:nth-child(1) > div > div:nth-child(3) > div:nth-child(1) > div:nth-child(2) > button > span > sup
|
|
|
|
|
|
|
|
1번옵션의 옵션이미지가 존재할 경우 옵션이미지 삭제버튼 요소
|
|
<div class="sc-igZIGL kQDmyq"><span class="sc-drFUgV dIaFuk FootnoteDescription ">삭제</span></div>
|
|
1번옵션의 옵션이미지가 존재할 경우 옵션이미지 삭제버튼 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(1) > div > div:nth-child(1) > div > div:nth-child(2) > div > div.ant-row.ant-row-no-wrap.ant-row-space-between.ant-row-middle.css-1li46mu > div:nth-child(1) > div
|
|
|
|
1번옵션의 옵션이미지가 없을 경우 옵션이미지 추가버튼 요소
|
|
<img draggable="false" src="./ic_image_add.svg" class="sc-dRGYJT hmQUGb">
|
|
1번옵션의 옵션이미지가 없을 경우 옵션이미지 추가버튼 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(1) > div > div:nth-child(1) > div > div:nth-child(2) > div > div > img
|
|
|
|
1번옵션의 옵션이미지가 존재할 경우 옵션이미지의 요소
|
|
<img src="https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f37ebe73994c46d385c454/8c3413f1-7aee-4238-9e68-195b9e3a582f.jpg" class="sc-gbvfcU ezktkd">
|
|
1번옵션의 옵션이미지가 존재할 경우 옵션이미지의 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(1) > div > div:nth-child(1) > div > div:nth-child(2) > div > img
|
|
|
|
2번옵션의 옵션이미지가 존재할 경우 옵션이미지 삭제버튼 요소
|
|
<div class="sc-igZIGL kQDmyq"><span class="sc-drFUgV dIaFuk FootnoteDescription ">삭제</span></div>
|
|
2번옵션의 옵션이미지가 존재할 경우 옵션이미지 삭제버튼 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(2) > div > div:nth-child(1) > div > div:nth-child(2) > div > div.ant-row.ant-row-no-wrap.ant-row-space-between.ant-row-middle.css-1li46mu > div:nth-child(1) > div
|
|
|
|
2번옵션의 옵션이미지가 없을 경우 옵션이미지 추가버튼 요소
|
|
<img draggable="false" src="./ic_image_add.svg" class="sc-dRGYJT hmQUGb">
|
|
2번옵션의 옵션이미지가 없을 경우 옵션이미지 추가버튼 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(2) > div > div:nth-child(1) > div > div:nth-child(2) > div > div > img
|
|
|
|
2번옵션의 옵션이미지가 존재할 경우 옵션이미지의 요소
|
|
<img src="https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f37ebe73994c46d385c454/a68eff8d-4f66-40f7-80ef-775babb9b46c.jpg" class="sc-gbvfcU ezktkd">
|
|
2번옵션의 옵션이미지가 존재할 경우 옵션이미지의 css
|
|
#productMainContentContainerId > div.sc-TOgAA.fZvEqY > div:nth-child(2) > div > div > div:nth-child(2) > div > div.sc-cFShuL.dbIeho > div > div > div.ant-collapse-content.ant-collapse-content-active > div > div > div.sc-fGdiLE.iyXMeU > div.ant-list.ant-list-split.css-1li46mu > div > div > ul > li:nth-child(2) > div > div:nth-child(1) > div > div:nth-child(2) > div > img
|
|
|
|
|
|
옵션이미지 삭제시 삭제 확인버튼 요소
|
|
<button type="button" class="ant-btn css-1li46mu ant-btn-primary ant-btn-dangerous"><span>삭제</span></button>
|
|
옵션이미지 삭제시 삭제 확인버튼 css
|
|
body > div:nth-child(18) > div > div.ant-modal-wrap.ant-modal-confirm-centered.ant-modal-centered > div > div.sc-ddjGPC.jbwEYW > div > div > div > div.ant-modal-confirm-btns > button.ant-btn.css-1li46mu.ant-btn-primary.ant-btn-dangerous
|
|
|
|
|
|
|
|
|
|
|
|
[단일상품 여부를 판단하는 셀레니움 코드]
|
|
def is_option_product(driver):
|
|
"""
|
|
웹페이지에서 현재 상품이 '단일 상품'인지 '옵션 상품'인지 확인합니다.
|
|
|
|
Parameters:
|
|
- driver: WebDriver 인스턴스
|
|
|
|
Returns:
|
|
- bool: 옵션 상품이면 True, 단일 상품이면 False
|
|
"""
|
|
try:
|
|
# '옵션 상품등록' 또는 '단일 상품등록' 선택 여부 확인
|
|
radio_group_css = "div#productMainContentContainerId div.ant-row.css-1li46mu > div"
|
|
radio_group_element = WebDriverWait(driver, 3).until(
|
|
EC.presence_of_element_located((By.CSS_SELECTOR, radio_group_css))
|
|
)
|
|
|
|
# 라디오 버튼의 선택 상태 확인
|
|
option_radio_xpath = "//label[span[text()='옵션 상품등록']]//input[@type='radio' and @value='false']"
|
|
single_radio_xpath = "//label[span[text()='단일 상품등록']]//input[@type='radio' and @value='true']"
|
|
|
|
option_radio_checked = radio_group_element.find_element(By.XPATH, option_radio_xpath).is_selected()
|
|
single_radio_checked = radio_group_element.find_element(By.XPATH, single_radio_xpath).is_selected()
|
|
|
|
if option_radio_checked and not single_radio_checked:
|
|
logger.debug("상품 유형: 다양한 옵션 상품")
|
|
return False
|
|
else:
|
|
logger.debug("상품 유형: 단일 상품")
|
|
return True
|
|
|
|
except Exception as e:
|
|
logger.error(f"상품 유형 확인 중 오류 발생: {e}", exc_info=True)
|
|
logger.debug("상품 유형 오류 발생으로 기본설정인 단일 상품등록으로 진행합니다.")
|
|
return False # 오류 발생 시 기본적으로 단일 상품으로 처리
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[vertexAI.py]
|
|
def translate_options(self, original_data):
|
|
"""
|
|
옵션 데이터를 번역하고 파이썬의 딕셔너리로 반환한다.
|
|
|
|
:param original_data: 원본 옵션 데이터 (dict 형태)
|
|
:return: 번역된 옵션명 (파이썬의 dict 형태)
|
|
"""
|
|
|
|
# 데이터 정리
|
|
cleaned_data = {key: self.clean_special_chars(value) for key, value in original_data.items()}
|
|
|
|
# 원본 데이터를 프롬프트 템플릿에 넣는다.
|
|
option_prompt_template = self.prompt_data['option_prompt_template']
|
|
prompt = option_prompt_template.format(options=json.dumps(cleaned_data, ensure_ascii=False))
|
|
|
|
# Vertex AI 모델에 프롬프트 전달하여 응답 받기
|
|
response = self.model.generate_content(prompt)
|
|
|
|
# 중괄호 내부의 내용만 추출
|
|
start = response.text.find('{')
|
|
end = response.text.rfind('}') + 1
|
|
if start != -1 and end != -1:
|
|
json_text = response.text[start:end]
|
|
try:
|
|
translated_data = json.loads(json_text)
|
|
except json.JSONDecodeError as e:
|
|
raise ValueError(f"응답 데이터를 파이썬의 딕셔너리로 파싱하는 중 오류 발생: {e}")
|
|
else:
|
|
raise ValueError("응답 데이터에서 유효한 JSON 형식을 찾을 수 없습니다.")
|
|
|
|
return translated_data
|
|
|
|
|
|
|
|
[translate_options 의 original_data 형식]
|
|
original_data = {
|
|
"origin_option_1": "单管制冷大一匹DAKC-27B",
|
|
"origin_option_2": "双管制冷1.5匹DAKC-35A",
|
|
"origin_option_3": "三管制冷大三匹DAKC-65",
|
|
"origin_option_4": "单管制冷小一匹DAKC-18",
|
|
"origin_option_5": "DAKC-82",
|
|
"origin_option_6": "DAKC-130",
|
|
"origin_option_7": "DAKC-250"
|
|
}
|
|
|
|
|
|
[translate_options 의 return 형식]
|
|
{
|
|
"trans_option_1": "단관 1.0HP",
|
|
"trans_option_2": "쌍관 1.5HP",
|
|
"trans_option_3": "삼관 3.0HP",
|
|
"trans_option_4": "단관 0.5HP",
|
|
"trans_option_5": "DAKC-82",
|
|
"trans_option_6": "DAKC-130",
|
|
"trans_option_7": "DAKC-250"
|
|
}
|
|
|
|
|
|
|
|
옵션 선택여부 판별요소
|
|
|
|
1번옵션의 삭제편집 div
|
|
//*[@id="productMainContentContainerId"]/div[1]/div[2]/div/div/div[2]/div/div[1]/div/div/div[2]/div/div/div[5]/div[1]/div/div/ul/li[1]/div/div[1]/div/div[2]/div/div[2]
|
|
1번옵션이 선택해제되었을 경우 생성되는 "제외된 옵션" div
|
|
//*[@id="productMainContentContainerId"]/div[1]/div[2]/div/div/div[2]/div/div[1]/div/div/div[2]/div/div/div[5]/div[1]/div/div/ul/li[1]/div/div[1]/div/div[2]/div/div[3]
|
|
1번옵션이 선택해제되었을 경우 생성되는 "제외된 옵션" 요소
|
|
<div class="sc-dfauwV bXsMpn"><span class="sc-bKNmIE fZvctk">제외된 옵션</span></div>
|
|
|
|
2번옵션의 삭제편집 div
|
|
//*[@id="productMainContentContainerId"]/div[1]/div[2]/div/div/div[2]/div/div[1]/div/div/div[2]/div/div/div[5]/div[1]/div/div/ul/li[2]/div/div[1]/div/div[2]/div/div[2]
|
|
2번옵션이 선택해제되었을 경우 생성되는 "제외된 옵션" div
|
|
//*[@id="productMainContentContainerId"]/div[1]/div[2]/div/div/div[2]/div/div[1]/div/div/div[2]/div/div/div[5]/div[1]/div/div/ul/li[2]/div/div[1]/div/div[2]/div/div[3]
|
|
2번옵션이 선택해제되었을 경우 생성되는 "제외된 옵션" 요소
|
|
<div class="sc-dfauwV bXsMpn"><span class="sc-bKNmIE fZvctk">제외된 옵션</span></div> |