길게 한번 설명해보겠습니다. ( 기존에 있던글을 수정하여 새로 작성 했습니다 )
안녕하세요 개발자 여러분..ㅎㅎ
지식을 좀 얻고 가고자 또 질문을 올립니다ㅎㅎ
아무리 해봐도 이미지서칭 이 외는 해답을 못찾겠네요...ㅎ
사실 이미지서칭으로만 해도 쉽고 간단하게 해결 할 수 있지만
사내 여러대의 PC에 놓고 쓸려고 하니
해상도가 다 달라서인지 이미지서칭이 제대로 이루어 지지 않는 경우가 많더군요
해서 본론으로 들어가면..!
1. 아래 표중에 <TD>접수대기</TD>로 구성되어있는 텍스트를 찾아내어
그 옆에 <TD> 2018~~~ </TD> 라는 링크가 있는 텍스트를 클릭하게 하고 싶습니다
2. 클릭한 후의 일정 작업을 하고 나면 접수 완료로 텍스트가 변경됩니다
3. 다시 한번 표를 검색하여 1번과 같은 조건을 찾고 클릭하도록 진행
파이썬에선 지인의 도움으로 구성해서 소스는 보유 하고 있는데요
파이썬에서도 가능하니까 오토핫키에서도 가능할줄 알고
소스 가져와서 살짝 변형해서 적용시켜봤는데..
이것도 도무지 답이 없네요 ~~
1. 파이썬 소스입니다 ( 파이썬에선 정상 작동 )
table = driver.find_elements_by_class_name("tablesorter")[0]
tbody = table.find_element_by_tag_name("tbody")
trs = tbody.find_elements_by_tag_name("tr")
tabNum = table.find_element_by_xpath('..').find_element_by_tag_name("center").find_elements_by_css_selector("*")
for i in range(0, len(tabNum)):
tabNum[i].click()
driver.implicitly_wait(5)
for tr in trs:
obj = tr.find_elements_by_tag_name("td")
if "접수대기" in obj[1].text:
obj[2].click()
driver.implicitly_wait(2)
#여기서 이후처리
break
for tr in trs:
obj = tr.find_elements_by_tag_name("td")
if "접수대기" in obj[1].text:
obj[2].click()
driver.implicitly_wait(2)
#여기서 이후처리
break
2. 제 나름대로 번역한 오토핫키 소스입니다.
table := driver.FindElementsByClass("tablesorter")
MsgBox % table ; 변수 내용을 확인하기 위함 저장 안됨..
tbody := table.FindElementsByTag("tbody")
MsgBox % tbody ; 변수 내용을 확인하기 위함 저장 안됨..
trs := tbody.FindElementsByTag("tr")
MsgBox % trs ; 변수 내용을 확인하기 위함 저장 안됨..
tabNum := table.FindElementsByXPath("..").FindElementsByTag("center").FindElementsByCss("*")
MsgBox % tabNum
while ( i = (0, tabNum)) ; 여기 구문은 파이썬에선 for 문으로 구성되어있지만
{ ; 오토핫키에선 for 문이 없는걸로 알고 있어 while 로 변경해보았습니다.
obj=tr.FindElementsByTag("td")
if obj[1] = "접수대기"
{
obj[2].click()
}
}
이상입니다. 누구나 다 그렇겠지만, 하나하나 구글링 하면서 하다보니
기초는 없더라도 이해 부탁드립니다.
쓰다보니 글이 너무 길게되었네요..
긴 글 읽어주셔서 감사합니다.
작은 팁이라도 감사히 받겠습니다!!!.
driver.FindElementsByClass("tablesorter") 등의 함수의 경우 배열이나 객체로 리턴이 될겁니다... 문자열이나 숫자가 아니라요. 그러니 파이썬에서도 for문으로 해당 객체에 대한 반목문을 작성한거겠죠?
그러니 당연히 msgbox로는 그 값을 확인할 수 없고요,
msgbox, % IsObject(table) 등으로 변수안에 객체나 배열이 담겨있는지 확인하시던지,
리턴된 객체나 배열의 구조를 아신다면 for 문으로도 확인이 됩니다 (오토핫키에도 for문이 있습니다! 찾아보세요)
for k,v in table
msgbox, % k ":" v
이런식으로요.. 이렇게 정상적으로 함수가 수행되었는지 확인을 먼저 해보시고
그 다음에 반복문 수행은 파이썬에서와 같이 for문으로 하면 됩니다.
for k,v in 객체명
{
블라블라
}
여기서 k는 해당 오브젝트의 키이며 v는 그 키에 대응하는 값입니다.
k,v는 단순히 제가 지정한 변수명이니 만약 스크립트 내에 다른 변수명과 겹친다면 다른 이름으로 쓰셔도 됩니다. key, value 혹은 kk,vv.. 혹은 tmpK, tmpV 등등...
위 올려주신 오핫코드에서는
for k,v in tabNum
{
obj:=tr.FindElementsByTag("td")
if (obj[1]="접수대기")
{ ; 위 부분도 반드시 괄호로 둘러쌓아야 합니다. 그래야 표현식이 됩니다. 표현식을 안쓰시려면 따옴표를 빼던지요
obj[2].click()
}
}
로 적용이 가능하겠지요.
양지님이 올리신 코드를 기반하여 테스트없이 작성한 것이니 잘못된 부분이 있을수도 있고요
참고하셔서 디버깅 하시는데 도움이 되길 바랍니다