{
	"0": {
		"0": {
			"unit_index": 0,
			"line_task_name": "PC에서 네이버를 자동으로 로그인하는 방법",
			"check_box": true
		},
		"1": {
			"unit_index": 9,
			"line_time_break": "1",
			"line_time_script": "# 네이버의 카페 로그인",
			"check_endof_task": false
		},
		"2": {
			"unit_index": 1,
			"combo_search_site": "https://nid.naver.com/nidlogin.logout?returl=https%3A%2F%2Fwww.naver.com",
			"check_auto_paste": false
		},
		"3": {
			"unit_index": 2,
			"line_filter_type": 0,
			"combo_filter_tag": "a",
			"combo_filter_attr": "class",
			"combo_filter_op": "LIKE",
			"combo_filter_item": "link_login"
		},
		"4": {
			"unit_index": 5,
			"combo_key_click_key": "Mouse.CLICK",
			"line_offset_xpos": "0",
			"line_offset_ypos": "0",
			"line_key_wait": "1",
			"line_key_repeat": "1"
		},
		"5": {
			"unit_index": 2,
			"line_filter_type": 0,
			"combo_filter_tag": "input",
			"combo_filter_attr": "id",
			"combo_filter_op": "EQ",
			"combo_filter_item": "id"
		},
		"6": {
			"unit_index": 4,
			"check_auto_peste": false,
			"check_echo_mode": false,
			"plain_keywords": "xxxxxxxx",
			"combo_keyword_type": "첫항목만",
			"general_unit_widget_height": 92,
			"general_plain_keywords_height": 53
		},
		"7": {
			"unit_index": 2,
			"line_filter_type": 0,
			"combo_filter_tag": "input",
			"combo_filter_attr": "id",
			"combo_filter_op": "EQ",
			"combo_filter_item": "pw"
		},
		"8": {
			"unit_index": 4,
			"check_auto_peste": false,
			"check_echo_mode": true,
			"plain_keywords": "xxxxxxxx",
			"combo_keyword_type": "첫항목만",
			"general_unit_widget_height": 92,
			"general_plain_keywords_height": 53
		},
		"9": {
			"unit_index": 2,
			"line_filter_type": 0,
			"combo_filter_tag": "button",
			"combo_filter_attr": "class",
			"combo_filter_op": "EQ",
			"combo_filter_item": "btn_login"
		},
		"10": {
			"unit_index": 11,
			"plain_scripts": "# 로그인 버튼 클릭\r\nsys.path.append(self.IPATH)\nfrom klicker_win32gui import KlickerWin32Gui\nimport pyautogui\n\r\n# win32gui를 통한 화면상에서 클리커 부라우저 시작위치\r\nwingui= KlickerWin32Gui()\nscreen_pos= wingui.get_win32_window_pos('Chrome_WidgetWin_1', '네이버 : 로그인')\nprint('screen_pos', screen_pos[0], screen_pos[1])\n\r\n# 클리커 부라우저가 위치한 곳의 디스플레이 배율(scale)\r\nabs_width = screen_pos[2] - screen_pos[0]\nrel_width= self.BROWSER.execute_script('return window.outerWidth;')\nscale = abs_width / rel_width\nprint('scale', scale)\n\r\n# Window 영역\r\nouterWidth= self.BROWSER.execute_script('return window.outerWidth;')*scale\nouterHeight= self.BROWSER.execute_script('return window.outerHeight;')*scale\nprint('Window Dimensions', outerWidth, outerHeight)\n\r\n# Client 영역\r\ninnerWidth= self.BROWSER.execute_script('return window.innerWidth;')*scale\ninnerHeight= self.BROWSER.execute_script('return window.innerHeight;')*scale\nprint('Client Dimensions', innerWidth, innerHeight)\n\r\n# 경계선과 헤더(부라우저메뉴, 툴바)\r\nborder= (outerWidth-innerWidth) / 2\nheader= (outerHeight-innerHeight) - border\nprint('border', border, 'header', header)\n\r\n# Scroll된 값\r\nscrollX= self.BROWSER.execute_script('return window.scrollX;')*scale\nscrollY= self.BROWSER.execute_script('return window.scrollY;')*scale\nprint('Scroll X, Y', scrollX, scrollY)\n\r\n# 크롬창시작위치+경계및헤더+엘러먼트시작위치+얼러먼트크기중간위치-스크롤된값\r\nelem_x = self.ul[self.CURNO-1].el[0].rect['x']*scale\nelem_y = self.ul[self.CURNO-1].el[0].rect['y']*scale\nelem_w = self.ul[self.CURNO-1].el[0].rect['width']*scale\nelem_h = self.ul[self.CURNO-1].el[0].rect['height']*scale\nxx = screen_pos[0]+border+elem_x+elem_w/2 - scrollX\nyy = screen_pos[1]+header+elem_y+elem_h/2 - scrollY\nprint('xx', xx, 'yy', yy)\n\r\n# 현재 마우스 포지션 저장해 놓음\r\nprv_pos= pyautogui.position()\n\r\n# 마우스 이동 및 클릭\r\npyautogui.moveTo(xx, yy)\npyautogui.click()\n\r\n# 마우스를 원래의 위치로 가져다 놓음\r\npyautogui.moveTo(prv_pos[0],prv_pos[1])",
			"dynamic_plain_scripts_vscroll": 1
		},
		"11": {
			"unit_index": 9,
			"line_time_break": "1",
			"line_time_script": "",
			"check_endof_task": true
		}
	}
}