본문 바로가기
Programming/AutoHotKey

[AHK] 무료 E-BOOK 얻기 https://www.packtpub.com/packt/offers/free-learning# 접속 프로그램

by NAMP 2016. 5. 28.

autohotkey GUI 사용법을 익히기 위해서 만들서 보았습니다.

https://www.packtpub.com/packt/offers/free-learning# 에 접속해서
등록된 계정에 로그인하여 무료 책을 신청하는 버튼을 클릭하는 프로그램입니다.
최초 exe 파일을 실행한 후 ID, PW 를 입력 후 Save 버튼을 클릭하면 txt 파일이 저장됩니다.
이 후 exe 파일을 실행하면, id.txt, pw.txt 에 저장된 내용을 읽어서 GUI 화면 없이 실행됩니다.
스케쥴 등록을 원할 경우에는, 시간을 선택한 후에 SetSchedule 버튼을 클릭합니다.
스케쥴 제거 시에는 Delete Schedule 버튼을 클릭합니다.

실행화면

지정된 텍스트 파일들에, 아이디와 비밀번호가 모두 있는지 확인합니다.

FileRead, Loginname, id.txt
FileRead, Password, pw.txt
Loginname := Trim(Loginname)
Password := Trim(Password)	

if (!Loginname || !Password) {
	RunGUI()
}else{
	RunProcess()
}

없으면 GUI를 띄우며, 있으면 프로그램을 진행합니다.

GUI 화면을 생성합니다.

Section 은 섹션 생성
xs 는 섹션에 대해서 x 줄 생성
ys 는 섹션에 대해서 y 줄 생성
xm 는 새로운 x 줄 생성
ym 는 새로운 y 줄 생성

Gui, add, text, y+10 Section, ID:
Gui, add, text, xs y+12, Password:		
Gui, add, edit, vid ys Section ; The ym option starts a new column of controls.	
Gui, add, edit, vpw xs Password
Gui, add, button, default ys Section gSave, Save  ; The label ButtonOK (if it exists) will be run when the button is pressed.
Gui, Add, DDL, vhour w50 xm Section, 00|01|02|03|04|05|06|07|08||09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24
Gui, add, text, ys , H		
Gui, add, button, default ys gSetSchedule, Set Schedule
Gui, add, button, default ys gDeleteSchedule, Delete Schedule
Gui, add, button, default ys gClose, Close
Gui, add, text, xm y+10, %msg%
Gui, show,, Get Free E-Book

파일에 내용 쓰기, 기존의 파일을 지우고, 새로 생성합니다.

Save(){	
	global
	Gui,Submit,nohide	
	if !CheckValue() 
		return
	
	idFile = %A_ScriptDir%\id.txt
	FileDelete %idFile%
	FileAppend, %id%, %idFile%

	
	pwFile = %A_ScriptDir%\pw.txt
	FileDelete %pwFile%
	FileAppend, %pw%, %pwFile%
}

Gui,Submit,nohide 를 실행하여 edit 컨트롤러에 있는 값을 변수로 가져옵니다.

스케쥴 등록은 schtasks 명령어를 사용합니다.

스케쥴 이름 정의

schName = get_packet_freebook_daily

스케쥴 등록

SetSchedule(){
	global
	Gui, Submit, nohide
	addScript = schtasks /create /tn %schName% /tr %A_ScriptFullPath% /sc DAILY /st %hour%:00:00 /f
	Run %comspec% /c %addScript%
}

스케쥴 삭제

DeleteSchedule(){
	global
	deleteScript = schtasks /delete /tn %schName% /f
	Run %comspec% /c %deleteScript%
}

웹 페이지 접속, 로그인, 버튼 클릭

RunProcess(){	
	URL = https://www.packtpub.com/packt/offers/free-learning#

	WB := ComObjCreate("InternetExplorer.Application")
	WB.Visible := True
	WB.Navigate(URL)
	While wb.readyState != 4 || wb.document.readyState != "complete" || wb.busy ; wait for the page to load
	   Sleep, 10
	wb.document.getElementById("email").value := Loginname
	wb.document.getElementById("password").value := Password
	wb.document.getElementById("edit-submit-1").click()
	While wb.readyState != 4 || wb.document.readyState != "complete" || wb.busy ; wait for the page to load
	   Sleep, 10
	wb.document.querySelector("input[value^=""Claim Your Free eBook""]").click()

	Close()
}

전체 소스

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
#SingleInstance force

FileRead, Loginname, id.txt
FileRead, Password, pw.txt
Loginname := Trim(Loginname)
Password := Trim(Password)	

if (!Loginname || !Password) {
	RunGUI()
}else{
	RunProcess()
}

guiClose(){
	;MsgBox, CLSOED!
	Close()
}

RunGUI(){
	global id, pw, time
	msg = 
	(
https://www.packtpub.com/packt/offers/free-learning# 에 접속해서 
등록된 계정에 로그인하여 무료 책을 신청하는 버튼을 클릭하는 프로그램입니다.
최초 exe 파일을 실행한 후 ID, PW 를 입력 후 Save 버튼을 클릭하면 txt 파일이 저장됩니다.
이 후 exe 파일을 실행하면, id.txt, pw.txt 에 저장된 내용을 읽어서 GUI 화면 없이 실행됩니다. 
스케쥴 등록을 원할 경우에는, 시간을 선택한 후에 SetSchedule 버튼을 클릭합니다. 
스케쥴 제거 시에는 Delete Schedule 버튼을 클릭합니다. 
							문의: beneapp@gmail.com
	)

	
	Gui, add, text, y+10 Section, ID:
	Gui, add, text, xs y+12, Password:		
	Gui, add, edit, vid ys Section ; The ym option starts a new column of controls.	
	Gui, add, edit, vpw xs Password
	Gui, add, button, default ys Section gSave, Save  ; The label ButtonOK (if it exists) will be run when the button is pressed.
	Gui, add, button, default xs Section gRun, Run  ; The label ButtonOK (if it exists) will be run when the button is pressed.
	Gui, Add, DDL, vhour w50 xm Section, 00|01|02|03|04|05|06|07|08||09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24
	Gui, add, text, ys , H		
	Gui, add, button, default ys gSetSchedule, Set Schedule
	Gui, add, button, default ys gDeleteSchedule, Delete Schedule
	Gui, add, button, default ys gClose, Close
	Gui, add, text, xm y+10, %msg%
	Gui, show,, Get Free E-Book
}

Run(){
	global
	Loginname = id
	Password = pw
	RunProcess()
}

schName = get_packet_freebook_daily

SetSchedule(){
	global
	Gui, Submit, nohide
	addScript = schtasks /create /tn %schName% /tr %A_ScriptFullPath% /sc DAILY /st %hour%:00:00 /f
	Run %comspec% /c %addScript%
}

DeleteSchedule(){
	global
	deleteScript = schtasks /delete /tn %schName% /f
	Run %comspec% /c %deleteScript%
}

CheckValue(){
	global
	if (!id) {
		MsgBox, Insert ID
		return false
	} 
	if (!pw) {
		MsgBox, Insert Password
		return false
	}

	return true
}


Save(){	
	global
	Gui,Submit,nohide	
	if !CheckValue() 
		return
	
	idFile = %A_ScriptDir%\id.txt
	FileDelete %idFile%
	FileAppend, %id%, %idFile%

	
	pwFile = %A_ScriptDir%\pw.txt
	FileDelete %pwFile%
	FileAppend, %pw%, %pwFile%
}

Close(){
	ExitApp
}


RunProcess(){	
	URL = https://www.packtpub.com/packt/offers/free-learning#

	WB := ComObjCreate("InternetExplorer.Application")
	WB.Visible := True
	WB.Navigate(URL)
	While wb.readyState != 4 || wb.document.readyState != "complete" || wb.busy ; wait for the page to load
	   Sleep, 10
	wb.document.getElementById("email").value := Loginname
	wb.document.getElementById("password").value := Password
	wb.document.getElementById("edit-submit-1").click()
	While wb.readyState != 4 || wb.document.readyState != "complete" || wb.busy ; wait for the page to load
	   Sleep, 10
	wb.document.querySelector("input[value^=""Claim Your Free eBook""]").click()

	Close()
}


댓글