{
	"0": {
		"0": {
			"unit_index": 0,
			"line_task_name": "쿠팡_사업자명_추출하기"
		},
		"1": {
			"unit_index": 11,
			"plain_scripts": "# 데이터프레임 생성(product_code를 index column으로 설정)\nu1.df_result=pd.DataFrame(columns=['category', 'prod_code', 'url', 'cur_date', 'brand_name', 'vendor_name', 'manufacturer', 'company', 'owner', 'addr', 'email', 'telephone', 'comm', 'bizno', 'company_url'])\nu1.df_result.set_index('prod_code', inplace=True)\n\n# 메인 이미지 저장 폴더 생성\nu1.file_path='@OPATH/coupang_business_info'\nif not os.path.isdir(u1.file_path): os.makedirs(u1.file_path)",
			"dynamic_plain_scripts_vscroll": 7
		},
		"2": {
			"unit_index": 1,
			"combo_search_site": "C:/Chagaun/Klicker/data/inputs/coupang_categories.csv",
			"check_auto_paste": false
		},
		"3": {
			"unit_index": 11,
			"plain_scripts": "# 첫번째 행의 url을 클립보드에 저장하고 해당행을 재거한다\n@CB = ''\nif len(u2.df) == 0:\n\t@CURNO = 33\nelse:\n\t@CB = u2.df.iat[0,0]\n\tu2.df.drop(u2.df.index[0], inplace=True)\n\n# 작업 시간을 구하여 저장\nu1.cur_date = 'D' + datetime.now().strftime('%y%m%d%H%M%S')\n\nprint(\"remain\",  len(u2.df), @CB)\n",
			"dynamic_plain_scripts_vscroll": 12
		},
		"4": {
			"unit_index": 1,
			"combo_search_site": "https://www.coupang.com/np/categories/498775",
			"check_auto_paste": true
		},
		"5": {
			"unit_index": 2,
			"line_filter_type": 0,
			"combo_filter_tag": "div",
			"combo_filter_attr": "class",
			"combo_filter_op": "EQ",
			"combo_filter_item": "search-result"
		},
		"6": {
			"unit_index": 6,
			"line_txtextr_pool": "text",
			"general_unit_widget_height": 128,
			"general_plain_txtextr_house_height": 56,
			"general_hor_plain_txtextr_house_height": 64
		},
		"7": {
			"unit_index": 5,
			"combo_key_click_key": "Keys.PAGEDOWN",
			"line_offset_xpos": "0",
			"line_offset_ypos": "0",
			"line_key_wait": "1",
			"line_key_repeat": "10"
		},
		"8": {
			"unit_index": 5,
			"combo_key_click_key": "Keys.PAGEUP",
			"line_offset_xpos": "0",
			"line_offset_ypos": "0",
			"line_key_wait": "0",
			"line_key_repeat": "10"
		},
		"9": {
			"unit_index": 2,
			"line_filter_type": 0,
			"combo_filter_tag": "ul",
			"combo_filter_attr": "id",
			"combo_filter_op": "EQ",
			"combo_filter_item": "productList"
		},
		"10": {
			"unit_index": 3,
			"line_filter_type": 1,
			"combo_filter_tag": "a",
			"combo_filter_attr": "class",
			"combo_filter_op": "EQ",
			"combo_filter_item": "baby-product-link"
		},
		"11": {
			"unit_index": 9,
			"line_time_break": "1",
			"line_time_script": "#상품코드와 페이지 URL 추출",
			"check_endof_task": false
		},
		"12": {
			"unit_index": 6,
			"line_txtextr_pool": "data-product-id,data-item-id,data-vendor-item-id,href",
			"general_unit_widget_height": 128,
			"general_plain_txtextr_house_height": 56,
			"general_hor_plain_txtextr_house_height": 64
		},
		"13": {
			"unit_index": 11,
			"plain_scripts": "# 메인 데이터프레임에 목록 결과 저장\nfor ii in range(len(u12.df)):\n\tcode=f'{u12.df.iat[ii,0]}_{u12.df.iat[ii,1]}_{u12.df.iat[ii,2]}'\n\tu1.df_result.at[code,'category']=u6.df.iat[0,0]\n\tu1.df_result.at[code,'cur_date']=u1.cur_date\n\tprint('code', code)",
			"dynamic_plain_scripts_vscroll": 5
		},
		"14": {
			"unit_index": 9,
			"line_time_break": "1",
			"line_time_script": "# 상세 페이지로 이동하여 사업자명 추출",
			"check_endof_task": false
		},
		"15": {
			"unit_index": 11,
			"plain_scripts": "# 상세 페이지 URL을 가지고 NEW TAB을 열어 호출\nurl = u12.df.iat[0,3]\nurl = f'https://coupang.com{url}'\nu12.df.drop(u12.df.index[0], inplace=True, axis=0)\n@BROWSER.execute_script(f'''window.open(\\'{url}\\',\\'_blank\\');''')\n@BROWSER.switch_to_window(@BROWSER.window_handles[-1])\nprint(\"leftover product\", len(u12.df), '60') ",
			"dynamic_plain_scripts_vscroll": 6
		},
		"16": {
			"unit_index": 9,
			"line_time_break": "1",
			"line_time_script": "# 사업자명 추출",
			"check_endof_task": false
		},
		"17": {
			"unit_index": 11,
			"plain_scripts": "# 빈페이지가 뜨거나 에러 페이지가 뜸면 키/클릭을 다시 수행\nelements= @BROWSER.find_elements_by_tag_name('body')\nif len(elements) <= 0 or len(elements[0].get_attribute('innerHTML').strip()) ==0 or @BROWSER.current_url.find('about:blank') >= 0:\n\tprint('blank page extracted', @BROWSER.current_url, elements[0].get_attribute('innerHTML'))\n\tu15.kl.insert(0, u15.last_clicked_kl_element)\n\t@BROWSER.forward()\n\t@CURNO = 13\n\tif len(@BROWSER.window_handles) > 1:\n\t\t@BROWSER.switch_to_window(@BROWSER.window_handles[-1])\n        @BROWSER.close()\n        @BROWSER.switch_to_window(@BROWSER.window_handles[-1])",
			"dynamic_plain_scripts_vscroll": 12
		},
		"18": {
			"unit_index": 5,
			"combo_key_click_key": "Keys.PAGEDOWN",
			"line_offset_xpos": "0",
			"line_offset_ypos": "0",
			"line_key_wait": "1",
			"line_key_repeat": "20"
		},
		"19": {
			"unit_index": 11,
			"plain_scripts": "# prod_code 추출\npath= @BROWSER.current_url.split('?')[0]\nprod_code= path.split('/')[-1]\n\nparm= @BROWSER.current_url.split('?')[1]\nparm_list= parm.split('&')\nfor parm in parm_list:\n\tif parm.find('itemId=')>=0:\n\t\tprod_code += '_' + parm.replace('itemId=', '').strip()\n\tif parm.find('vendorItemId=')>=0:\n\t\tprod_code += '_' + parm.replace('vendorItemId=', '')\nprod_code= prod_code.replace('amp;', '').replace('&amp;', '').strip()\n\n# 상품별 URL 저장\ncolumn = 'url'\nif column not in u1.df_result.columns.to_list():\n\tu1.df_result[column]= '' * len(u1.df_result)\nu1.df_result.at[prod_code,'url']=@BROWSER.current_url\n\n# 브래드명  추출\nbrand_name, vendor_name, manufacturer = '', '', ''\nelements= @BROWSER.find_elements_by_xpath('/html/body/div[2]/section/div[1]/div/div[3]/a')\nif len(elements) > 0:\n\tbrand_name= elements[0].text.strip()\n\n# 벤더명 추출\nelements= @BROWSER.find_elements_by_xpath('/html/body/div[2]/section/div[1]/div/div[3]/div[8]/div[1]/div[1]/a')\nif len(elements) > 0:\n\tvendor_name = elements[0].text\n\tvendor_name= vendor_name.replace('주식회사', '').replace('(주)', '').strip()\n\n\tvendor_name = elements[0].text\n\tvendor_name= vendor_name.split('(')[0].split('_')[0].strip()\n\tvendor_name= vendor_name.replace('㈜', '').replace('주식회사', '').strip()\n\n\n# 제조자명 추출\nelements= @BROWSER.find_elements_by_xpath('/html/body/div[2]/section/div[2]/div[10]/ul[2]/li[1]/div[2]/div[1]/div/table/tbody')\nif len(elements) > 0:\n\tdetails = elements[0].text\n\tif details.find('제조자(수입자)') >= 0:\n\t\tdetails= details.replace('주식회사', '').replace('(주)', '').replace('제조자:', '')\n\t\tmanufacturer= details.split('제조자(수입자)')[1].strip().split(' ')[0].split(',')[0].split('\\n')[0].split('/')[0]\n\t\tmanufacturer= manufacturer.replace('상품', '').strip()\n\t\tmanufacturer= manufacturer.split('(')[0].split('_')[0].split('[')[0].strip()\n\t\tmanufacturer= manufacturer.replace('■', '').replace('○', '').replace('㈜', '').replace('알수없음', '').strip()\n\t\tmanufacturer= manufacturer.replace('제조ㆍ수입원', '').replace('페이지', '').replace('발열조끼:', '').replace('제조원', '').strip()\n\t\tmanufacturer= manufacturer.replace('상세', '').replace('설명', '').replace('참조', '').strip()\n\n# 판매자 정보 추출\ncompany, owner, addr, email, telephone, comm, bizno = str(), str(), str(), str(), str(), str(), str()\nelements= @BROWSER.find_elements_by_xpath('/html/body/div[2]/section/div[2]/div[10]/ul[2]/li[4]/div/table/tbody')\nif len(elements) > 0:\n\tdetails = elements[0].text\n\tif details.find('e-mail') >= 0:\n\t\tdetail_list = details.split('\\n')\n\t\tfor ii, detail in enumerate(detail_list):\n\t\t\tif detail.find('대표자') >= 0:\n\t\t\t\tdetail_data = detail_list[ii+1]\n\t\t\t\tif detail_data.find('/') >= 0:\n\t\t\t\t\tcompany = detail_data.split('/')[0]\n\t\t\t\t\towner = detail_data.split('/')[1]\n\t\t\telif detail.find('소재지') >= 0:\n\t\t\t\taddr = detail_list[ii+1]\n\t\t\telif detail.find('e-mail') >= 0:\n\t\t\t\temail = detail_list[ii+1]\n\t\t\telif detail.find('연락처') >= 0:\n\t\t\t\ttelephone = detail_list[ii+1]\n\t\t\telif detail.find('통신판매업') >= 0:\n\t\t\t\tcomm = detail_list[ii+1]\n\t\t\telif detail.find('사업자번호') >= 0:\n\t\t\t\tbizno = detail_list[ii+1]\n\nprint(prod_code, brand_name, vendor_name, manufacturer, company, owner, addr, email, telephone, comm, bizno)\n\n# 브랜드명 저장\ncolumn = 'brand_name'\nif column not in u1.df_result.columns.to_list():\n\t u1.df_result[column]= '' * len(u1.df_result)\nu1.df_result.at[prod_code, column]=brand_name\n\n# 벤더명 저장\ncolumn = 'vendor_name'\nif column not in u1.df_result.columns.to_list():\n\t u1.df_result[column]= '' * len(u1.df_result)\nu1.df_result.at[prod_code, column]=vendor_name\n\n# 제조자명 저장\ncolumn = 'manufacturer'\nif column not in u1.df_result.columns.to_list():\n\t u1.df_result[column]= '' * len(u1.df_result)\nu1.df_result.at[prod_code, column]=manufacturer\n\n# 상호 저장\ncolumn = 'company'\nif column not in u1.df_result.columns.to_list():\n\t u1.df_result[column]= '' * len(u1.df_result)\nu1.df_result.at[prod_code, column]=company\n\n# 대표자 저장\ncolumn = 'owner'\nif column not in u1.df_result.columns.to_list():\n\t u1.df_result[column]= '' * len(u1.df_result)\nu1.df_result.at[prod_code, column]=owner\n\n# 소재지 저장\ncolumn = 'addr'\nif column not in u1.df_result.columns.to_list():\n\t u1.df_result[column]= '' * len(u1.df_result)\nu1.df_result.at[prod_code, column]=addr\n\n# 이메일 저장\ncolumn = 'email'\nif column not in u1.df_result.columns.to_list():\n\t u1.df_result[column]= '' * len(u1.df_result)\nu1.df_result.at[prod_code, column]=email\n\n# 연락처 저장\ncolumn = 'telephone'\nif column not in u1.df_result.columns.to_list():\n\t u1.df_result[column]= '' * len(u1.df_result)\nu1.df_result.at[prod_code, column]=telephone\n\n# 통신판매업신고번호 저장\ncolumn = 'comm'\nif column not in u1.df_result.columns.to_list():\n\t u1.df_result[column]= '' * len(u1.df_result)\nu1.df_result.at[prod_code, column]=comm\n\n# 사업자번호 저장\ncolumn = 'bizno'\nif column not in u1.df_result.columns.to_list():\n\t u1.df_result[column]= '' * len(u1.df_result)\nu1.df_result.at[prod_code, column]=bizno\n\n",
			"dynamic_plain_scripts_vscroll": 100
		},
		"20": {
			"unit_index": 5,
			"combo_key_click_key": "Keys.Backward",
			"line_offset_xpos": "0",
			"line_offset_ypos": "0",
			"line_key_wait": "0",
			"line_key_repeat": "1"
		},
		"21": {
			"unit_index": 10,
			"line_left_side": "len(u12.df)",
			"combo_operator": ">",
			"line_rigt_side": "0",
			"line_jump_number": "14",
			"line_jump_total": "9999"
		},
		"22": {
			"unit_index": 9,
			"line_time_break": "1",
			"line_time_script": "# 다음 페이지로 이동",
			"check_endof_task": false
		},
		"23": {
			"unit_index": 5,
			"combo_key_click_key": "Keys.PAGEDOWN",
			"line_offset_xpos": "0",
			"line_offset_ypos": "0",
			"line_key_wait": "0",
			"line_key_repeat": "10"
		},
		"24": {
			"unit_index": 2,
			"line_filter_type": 0,
			"combo_filter_tag": "div",
			"combo_filter_attr": "class",
			"combo_filter_op": "LIKE",
			"combo_filter_item": "page-warpper"
		},
		"25": {
			"unit_index": 3,
			"line_filter_type": 1,
			"combo_filter_tag": "a",
			"combo_filter_attr": "data-page",
			"combo_filter_op": "GT",
			"combo_filter_item": "@PAGENO"
		},
		"26": {
			"unit_index": 6,
			"line_txtextr_pool": "text",
			"general_unit_widget_height": 128,
			"general_plain_txtextr_house_height": 56,
			"general_hor_plain_txtextr_house_height": 64
		},
		"27": {
			"unit_index": 11,
			"plain_scripts": "u27.repeated_page_count = 0\nu27.previous_url = @BROWSER.current_url\nprint('previous_url', u27.previous_url)",
			"dynamic_plain_scripts_vscroll": 1
		},
		"28": {
			"unit_index": 5,
			"combo_key_click_key": "Mouse.CLICK",
			"line_offset_xpos": "0",
			"line_offset_ypos": "0",
			"line_key_wait": "2",
			"line_key_repeat": "1"
		},
		"29": {
			"unit_index": 11,
			"plain_scripts": "# 다음페이지로 바뀌지 않았으면 키/클릭을 다시 시도하기\nif u27.repeated_page_count > 10:\n\t@CURNO = 30\nelif u27.previous_url == @BROWSER.current_url:\n\t@CURNO = 26\n\tu27.repeated_page_count += 1\n\tu28.kl.insert(0, u28.last_clicked_kl_element)\n\ttime.sleep(5)\nelse:\n\t@PAGENO += 1\nprint('PAGENO', @PAGENO, 'CURNO', @CURNO, u27.repeated_page_count)",
			"dynamic_plain_scripts_vscroll": 8
		},
		"30": {
			"unit_index": 10,
			"line_left_side": "int(u26.df.iat[0,0])",
			"combo_operator": "==",
			"line_rigt_side": "@PAGENO",
			"line_jump_number": "7",
			"line_jump_total": "10"
		},
		"31": {
			"unit_index": 11,
			"plain_scripts": "# 파일로 저장하기\nu31.file_name=u1.file_path + '/coupang_business_infos.csv'\n\n# 헤더 출력 여부\nheader= False if os.path.isfile(u31.file_name) else True\n\n# 결과 파일 저장\nu1.df_result.to_csv(u31.file_name, mode='w', header=header, index=True, encoding='utf-8-sig')\n\nprint(u31.file_name, 'writed')",
			"dynamic_plain_scripts_vscroll": 11
		},
		"32": {
			"unit_index": 11,
			"plain_scripts": "# 다시 값 초기화\n@PAGENO = 1\nu21.id['line_jump_curnt'] = '0'\t# 60 item count clear\nu30.id['line_jump_curnt'] = '0'\t# page no clear\n",
			"dynamic_plain_scripts_vscroll": 2
		},
		"33": {
			"unit_index": 10,
			"line_left_side": "len(u2.df)",
			"combo_operator": ">",
			"line_rigt_side": "0",
			"line_jump_number": "3",
			"line_jump_total": "9999"
		},
		"34": {
			"unit_index": 9,
			"line_time_break": "10",
			"line_time_script": "",
			"check_endof_task": true
		},
		"35": {
			"unit_index": 11,
			"plain_scripts": "company, owner, addr, email, telephone, comm, bizno = str(), str(), str(), str(), str(), str(), str()\nelements= @BROWSER.find_elements_by_xpath('/html/body/div[2]/section/div[2]/div[10]/ul[2]/li[4]/div/table/tbody')\nif len(elements) > 0:\n\tdetails = elements[0].text\n\tif details.find('e-mail') >= 0:\n\t\tdetail_list = details.split('\\n')\n\t\tfor ii, detail in enumerate(detail_list):\n\t\t\tif detail.find('대표자') >= 0:\n\t\t\t\tdetail_data = detail_list[ii+1]\n\t\t\t\tprint(detail_data)\n\t\t\t\tif detail_data.find('/') >= 0:\n\t\t\t\t\tcompany = detail_data.split('/')[0]\n\t\t\t\t\towner = detail_data.split('/')[1]\n\t\t\telif detail.find('소재지') >= 0:\n\t\t\t\taddr = detail_list[ii+1]\n\t\t\telif detail.find('e-mail') >= 0:\n\t\t\t\temail = detail_list[ii+1]\n\t\t\telif detail.find('연락처') >= 0:\n\t\t\t\ttelephone = detail_list[ii+1]\n\t\t\telif detail.find('통신판매업') >= 0:\n\t\t\t\tcomm = detail_list[ii+1]\n\t\t\telif detail.find('사업자번호') >= 0:\n\t\t\t\tbizno = detail_list[ii+1]\n\n\nprint(company, owner, addr, email, telephone, comm, bizno)\n",
			"dynamic_plain_scripts_vscroll": 23
		}
	}
}