길게 한번 설명해보겠습니다. ( 기존에 있던글을 수정하여 새로 작성 했습니다 )
안녕하세요 개발자 여러분..ㅎㅎ
지식을 좀 얻고 가고자 또 질문을 올립니다ㅎㅎ
아무리 해봐도 이미지서칭 이 외는 해답을 못찾겠네요...ㅎ
사실 이미지서칭으로만 해도 쉽고 간단하게 해결 할 수 있지만
사내 여러대의 PC에 놓고 쓸려고 하니
해상도가 다 달라서인지 이미지서칭이 제대로 이루어 지지 않는 경우가 많더군요
해서 본론으로 들어가면..!
1. 아래 표중에 <TD>접수대기</TD>로 구성되어있는 텍스트를 찾아내어
그 옆에 <TD> 2018~~~ </TD> 라는 링크가 있는 텍스트를 클릭하게 하고 싶습니다
2. 클릭한 후의 일정 작업을 하고 나면 접수 완료로 텍스트가 변경됩니다
3. 다시 한번 표를 검색하여 1번과 같은 조건을 찾고 클릭하도록 진행
![XRfOPnl.png](https://i.imgur.com/XRfOPnl.png)
파이썬에선 지인의 도움으로 구성해서 소스는 보유 하고 있는데요
파이썬에서도 가능하니까 오토핫키에서도 가능할줄 알고
소스 가져와서 살짝 변형해서 적용시켜봤는데..
이것도 도무지 답이 없네요 ~~
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()
}
}
로 적용이 가능하겠지요.
양지님이 올리신 코드를 기반하여 테스트없이 작성한 것이니 잘못된 부분이 있을수도 있고요
참고하셔서 디버깅 하시는데 도움이 되길 바랍니다