매크로

조회 수 579 추천 0 댓글 4

길게 한번 설명해보겠습니다. ( 기존에 있던글을 수정하여 새로 작성 했습니다 )


안녕하세요 개발자 여러분..ㅎㅎ

지식을 좀 얻고 가고자 또 질문을 올립니다ㅎㅎ

아무리 해봐도 이미지서칭 이 외는 해답을 못찾겠네요...ㅎ

사실 이미지서칭으로만 해도 쉽고 간단하게 해결 할 수 있지만


사내 여러대의 PC에 놓고 쓸려고 하니

해상도가 다 달라서인지 이미지서칭이 제대로 이루어 지지 않는 경우가 많더군요


해서 본론으로 들어가면..!


1. 아래 표중에 <TD>접수대기</TD>로 구성되어있는 텍스트를 찾아내어

   그 옆에 <TD> 2018~~~ </TD> 라는 링크가 있는 텍스트를 클릭하게 하고 싶습니다


2. 클릭한 후의 일정 작업을 하고 나면 접수 완료로 텍스트가 변경됩니다


3. 다시 한번 표를 검색하여 1번과 같은 조건을 찾고 클릭하도록 진행



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()
}
}

이상입니다.  누구나 다 그렇겠지만, 하나하나 구글링 하면서 하다보니
기초는 없더라도 이해 부탁드립니다.
쓰다보니 글이 너무 길게되었네요..
긴 글 읽어주셔서 감사합니다.
작은 팁이라도 감사히 받겠습니다!!!.

  • Hangoon 2018.10.05 09:24

    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()

        }

    }

    로 적용이 가능하겠지요.


    양지님이 올리신 코드를 기반하여 테스트없이 작성한 것이니 잘못된 부분이 있을수도 있고요 

    참고하셔서 디버깅 하시는데 도움이 되길 바랍니다

  • 빵글빵글 2018.10.05 09:56
    답변 감사합니다.
    아무것도 모른 상태에서 그래도 설명을 들으니 뭔가 막힌 맘이 뚤린 기분이네여 ㅎ.ㅎ
    올려주신 팁 대로 좀 더 짱구 굴려보다가 다시 돌아오겠습니다!

    감사합니다 한군님.
  • Hangoon 2018.10.05 10:00
    노파심이긴 한데 파이썬 코드 보니 for문안에 for문이 들어가 있는데
    (tabNum 객체의 for문 안에 trs객체의 for문이 있음)
    웹페이지 구조를 모르니 제가 뭐라 할순없지만
    양지님이 작성하신 코드는 tabNum객체로 반복문을 한번 돌리는걸로 되어있는데... 축약해서 올리시느라 그래하신걸수도 있겠지만 저걸로는 원코드처럼은 안될 것 같아 보이네요
  • Hangoon 2018.10.05 09:47

    사족을 달자면 while문 문법도 잘못되셨습니다 ^^;;

    whlie (조건문) 입니다. 

    i변수를 인덱스처럼하여 tabNum객체의 길이만큼 반복을 하고 싶은 경우

    i=(0,tabNum) 와 같은 식으로는 작성하지 않습니다.


    while을 쓰시려면


    i=0

    whlie (i<tabNum.length())

    {

       블라블라

       i++

    }

    이런식으로 쓰셔야 됩니다.


    그런데 오토핫키에는 그보다 편한 방법이 더 많이 있어서 while문은 사실 잘 안쓰게 됩니다 ㅎㅎ

    loop라는 단순하면서도 강력한 반복문이 있어서요


List of Articles
분류 제목 글쓴이 최근변경 추천
질문 오토핫키 배우기 힘들어요 5 너무커요.. 2018.10.22 0/0
자유 오토핫키 제작의뢰 합니다. 혼자 하려니 초보라 힘드네... 난달린다 2018.10.09 0/0
질문 이미지가 몇개 서치됬는지 카운팅가능한가요? 2 세나블텍 2018.10.11 0/0
질문 카카오톡 아이디를 찾고있습니다 4 샌드위치 2019.03.20 0/0
질문 메크로 종류 3 여나니 2018.10.12 0/0
질문 특정색만 찾아서 이미지서치가 가능할까요? 3 HyunsD 2018.10.10 0/0
질문 파이썬 -> 오토핫키 소스 번역질문 ( 한군님! ) 4 빵글빵글 2018.10.05 0/0
질문 pc 메이플 사냥 매크로 라타치야 2018.10.03 0/0
질문 ahk 파일에 잘못된게 있는지 봐주실수있을가요? 4 늘숲 2018.10.06 0/0
질문 HTML <TD> 텍스트를 마우스 클릭 가능한가요 ? 4 빵글빵글 2018.10.04 0/0
질문 인증보안관련 질문입니다~ 4 시간에기대어 2018.10.08 0/0
질문 안녕하세요 포스트메세지관련 질문있어서 글써봅니다!! lym13 2018.10.01 0/0
질문 함수 사용 질문 6 빵글빵글 2018.10.03 0/0
자유 오토핫키에는 랜덤값 넣을수 있는것 있나요?? 1 데프픗 2018.10.01 0/0
자유 목표했던 매크로 하나 만들었네요. 6 무거움 2019.03.20 0/0
정보 오토핫키 if 기본부분인데 이해가 안돼서 도와주세요! 4 slka 2018.10.16 0/0
질문 파이썬에서 오토핫키로 변경 질문! 4 빵글빵글 2018.09.29 0/0
질문 이미지 서치도 게임사에서 대응을 하나요? 무거움 2018.09.26 0/0
질문 배우기 쉬운 매크로는 어느걸까요?? 7 모기야모기야 2019.04.18 0/0
질문 키보드 값을 알고 싶어요 2 웅ol 2019.03.20 0/0
Board Pagination Prev 1 ... 484950515253545556 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글