아래 포스팅에서 Synology NAS 에 pip 설치하는 방법에 대해 설명한 적이 있는데, 오늘은 Python3 와 pip 를 설치하는 방법에 대해 소개하려 합니다.

http://iamaman.tistory.com/1887

일단 Synology NAS 에 Python3 를 설치하는 방법은 매우 간단합니다. Synology NAS 패키지 센터에서 아래와 같이 Python 으로 검색을 해서 Python3 를 설치하시면 됩니다.

다음으로 pip 를 설치하는 방법은 ssh 로 Synology NAS 에 접속한 다음 아래와 코딩하시면 됩니다.

sudo -i # root 사용자 변경

wget https://bootstrap.pypa.io/get-pip.py # get-pip.py 다운로드

python3 get-pip.py # pip 설치

python3 -m pip install requests # requests 설치

python3 -m pip install selenium # selenium 설치

su - 유저명   # 사용자 변경



기존에 저는 파이썬에서 selenium 을 사용하여 제가 필요한 웹관련 자동화를 해 왔습니다. 제 블로그에 일주일에 한 번씩 올라가는 로또 관련한 포스팅이나 매일 하고 있는 종목 검색 포스팅 등은 파이썬을 사용하여 Tistory Open API 로 포스팅이 되고 있습니다. 최근에 아래 포스팅에서 Autohotkey 에서 selenium 사용에 대해 소개 한 적이 있었는데, 파이썬에서 사용하던 method 이름과 조금 다르더군요.

http://iamaman.tistory.com/2021

그래서 오늘은 COM 객체 사용시 사용 가능한 함수 및 속성을 알아내는 방법에 대해서 소개하려합니다. 현재 자신의 컴퓨터에서 사용 가능한 COM 객체를 알고 싶은 분들은 아래 주소의 글을 참조해 보시기 바랍니다.

http://iamaman.tistory.com/2215

COM 객체 사용시 사용 가능한 함수 및 속성은 COM Object 의 멤버를 찾으면 되는 것입니다. 저는 현재 Autohotkey 에서 selenium 을 사용하여 chrome 을 자동화하고 있습니다. 그래서 selenium 의 함수 및 속성 을 찾아보려 합니다.

간단하게 Powershell 에서 아래와 같이 코딩하고 실행하면

$se = New-Object -ComObject Selenium.CHROMEDriver

$se | Get-Member

다음과 같이 사용 가능한 멤버 함수 및 속성의 목록을 확인할 수 있습니다.

확인을 해보니 Python 에서 selenium 을 사용할때는 멤버 함수 명이 소문자였고 언더바(_) 로 구분되는 형태였는데 Autohotkey 에서 selenium 을 사용할때는 그렇지가 않군요. 예를 들면 Python 에서는 find_element_by_id() 였다면 Autohotkey 에서는 FindElementById() 의 형태네요.



요즘 크롤링에 관심을 갖게 되면서 PhantomJS 와 selenium 을 알게 되었습니다. 아~ 왜 이걸 이제 알았을까 하는 생각이 들 정도로 편리한 기능들이 엄청나게 많더군요. 

주간 메뉴를 다운로드 한다던가 등등 토렌트 파일을 자동으로 다운로드 받는다던가 등등 

반복적인 웹 작업들을 한번만 코딩 해 놓고 예약 작업에 설정해 놓고 주기적으로 돌리니 세상 편하더군요.

암튼 오늘은 Windows 환경에서 PhantomJS 를 다운로드 하고 설치하는 방법에 대해 소개하려 합니다. 

아래 주소에서 

http://phantomjs.org/download.html


다음과 같이 Windows 용 PhantomJS 를 다운로드 하고 사용하시는 적절한 폴더에 압축을 해제 합니다. 


다음으로 phantomjs-2.1.1-windows\bin 폴더의 전체 경로를 path 환경변수에 설정합니다. 

환경변수는 시스템 -> 고급 시스템 설정 -> 환경 변수 버튼 클릭을 통해 환경 변수 설정 창에 들어갈수 있습니다.

또는 아래 포스팅에서 소개했던 Rapid Environment Editor 와 같은 툴을 사용하면 편리하고~ 

http://iamaman.tistory.com/1213


이전에 자바 환경 변수를 설정할때도 소개 했지만 setx 명령어를 사용하면 정말 편리합니다. 저는 요즘 이 방법을 주로 사용 합니다.

http://iamaman.tistory.com/623


저의 경우 PhantomJS 의 bin 폴더의 경로는 다음과 같습니다. 

J:\utility\phantomjs-2.1.1-windows\bin


위에 주소를 환경 변수에 설정하기 위해 다음과 같이 명령어를 작성 합니다. 

setx path "J:\utility\phantomjs-2.1.1-windows\bin";"%path%" /m


이제 설정은 다 끝났습니다. 정상적으로 환경변수 설정이 됐는지 확인하려면 cmd 창에서 phantomjs.exe 라고 명령해 보면 아래 그림과 같이 PhantomJS 프롬프트가 실행되어야 합니다. 



Autohotkey 를 사용하여 웹 자동화를 하는 경우 컴포넌트 오브젝트 모델(Component Object Model, COM) 을 사용하여 internet explorer 를 자동화 하곤 했는데~
 
최근에는 Chrome 을 주로 사용하기도 하고~ Python 에서 selenium 사용을 익히다 보니 Autohotkey 를 통한 웹 자동화에 소홀해 졌었습니다. 

그런데 최근 아래 포스팅을 보고 Autohotkey  에서 selenium 을 자동화 할 수 있다는 것을 알게 됐습니다. 


간단하게 정리한 과정은 다음과 같습니다.

1.  아래 주소에서 SeleniumBasic 을 다운로드 받고 설치 합니다.

2.  SeleniumBasic 설치시 WebDriver 도 설치가 되는데~  자신의 브라우저 버전과 안 맞아서 정상적으로 동작하지 않는다면 아래 주소에서 Third party software 부분에서 사용하고자 하는 브라우져의 WebDriver 를 설치 합니다. 


저는 현재 chrome 을 주로 사용하는데 ~ 과거 버전을 사용하고 있습니다. 그래서 최신 버전의  WebDriver 를 설치하니 정상적으로 동작하지 않더군요. 그래서 아래 주소에서 제 브라우저 버전에 맞는 WebDriver 의 버전이 무엇인지를 확인한 후에~  Chrome WebDriver 를 다운로드 받아서 설치 했습니다. 


chrome 의 버전을 확인하고 싶으시면 chrome 의 주소 표시 창에 chrome://help/  또는 chrome://version/ 이라고 치고 들어가 보시면 확인 할 수 있습니다.  저는 버전 54.0.2840.71 이어서~  ChromeDriver 2.25 버전을 아래 주소에서 다운로드 받았습니다.

 
다운로드 받고 압축을 푼 후에 SeleniumBasic이 설치된 폴더(Windows 7 : C:\Program Files\SeleniumBasic, Windows 10 : C:\Users\자신의계정\AppData\Local\SeleniumBasic ) 에 chromedriver.exe 파일을 붙여넣기 합니다. 

Autohotkey 에서 selenium 을 사용하는 예제 등은 첫 번째 링크의 예제를 확인해 보시기 바랍니다.

저는 다음과 같은 예제를 똑같이 따라 해 보니~ 

driver:= ComObjCreate("Selenium.CHROMEDriver") ;Chrome driver
driver.Get("http://the-automator.com/")
driver.findElementsByName("s").item[2].SendKeys("hello world")
MsgBox here

다음과 같이 정상적으로 동작하더군요. 


Autohotkey 에서 Selenium 사용시의 함수 이름 관련 글 : http://iamaman.tistory.com/2307 


  1. 김동민 2018.09.04 08:47

    안녕하세요 작성자님
    질문이 있어 글을 남겨봅니다

    위 스크립트 종료후에 바로 제어되고 있는 크롬창이 종료 되는데
    혹시 크롬창 유지 시켜주는 방법은 없을까요 ?

    • 남성 2018.09.04 13:09 신고

      프로그램이 종료 되기 때문에 크롬창이 꺼지는 것이므로 프로그램이 종료 되지 않게 해 주시면 되지 않을까요?

      아래와 같이 해 주니 프로그램이 종료되지 않고 따라서 브라우저도 살아 있네요.

      #Persistent
      ------Autohotkey 스크립트 ------
      return

  2. 김동민 2018.09.05 08:28

    감사합니다.
    막힌가슴히 뻥 뚤리네요!
    즐거운 하루 되세요 ^^

    • 남성 2018.09.05 13:45 신고

      도움되었다니 다행이네요. 방문해 주셔서 감사합니다. ^^

  3. 김동민 2018.09.05 20:01

    안녕하세요 작성자님
    염치 불구하고 질문좀 드리고자 또 방문드렸습니다..
    기존 파이썬으로 Selenium 을 이용하여 웹 자동화를 구성하다가
    오토핫키로 다시 해보고 있는데요

    driver.find_element_by_link_text("Expand All").click()
    위와 같은 파이썬 소스를
    driver.find_elementbylinktext("단계별A/S진행등록").click()
    위와같이 수정해보았는데 적용이 안되네요..
    혹시 방법이 있을까요 ??

    파이썬에선 잘 작동했는데 오토핫키는 뭔가 다른가보네요...ㅎ

    • 남성 2018.09.05 21:27 신고

      파이썬이랑 비교하면 함수 이름이 조금씩 다릅니다.

      아래 주소글 확인하면 Autohotkey 사용할때의 함수이름을 알 수 있을 거에요.

      http://iamaman.tistory.com/2307

      Python selenium 은 _(underscore) 로 구분된 함수 이름으로 만들었던데 Autohotkey 에서는 그렇지 않습니다. 예를 들어 질문하신 find_element_by_link_text 함수는 Autohotkey 에서는 FindElementsByLinkText 를 사용하시면 될겁니다.

      위 주소의 글 참조하면 다른 함수들 이름에 대해서도 어떻게 쓰는게 맞는건지 확인 할 수 있을 거에요.

  4. 징글징글벨라 2018.09.06 00:16 신고

    코드가 회사 컴에 있어서 지금은 확인이 안되고..

    사이트 들어가보니 잘못된 주소이거나 비공개 또는 삭제된 글이라네요 ~

    티스토리 계정 있어서 로그인 해봐도 안나오네여 ㅎㅎ

    • 남성 2018.09.06 01:28 신고

      어떤게 삭제 됐다는 건지....? 2307 글 삭제 안 됐는데 ...

  5. 김동민 2018.09.06 17:51

    ㅎㅎ 죄송합니다
    잠결에 쳐서 오타가 있었나봐요
    분명 다시 확인했었는데...ㅎ

    알려주신대로 일단 해결했습니다.

    2307 게시물에서도 참고 하고 공부해보고
    잘 모르겠으면 다시 찾아뵙겠습니다

    도움 정말 감사합니다!

  6. 셀레늄 2018.09.09 15:46

    셀레늄과 오토핫키를 어떤 경우에 같이 쓰게 되는건가요?

    • 남성 2018.09.09 18:35 신고

      웹 자동화를 하고 싶은 경우 셀레늄 라이브러리를 주로 사용하는데 언어 선택을 Autohotkey 로 한것 뿐입니다. Python 이든 C# 이든 자바든 편하신 언어 사용하시면 됩니다.

  7. named7 2019.03.07 17:15

    안녕하세요 작성자님
    게시글 올리신지 오래되서 답변을 해주실지는 모르겠지만
    질문이 있어서 댓글남겨요

    driver.findElementsByName("s").item[2].sendkeys(hello world) 와같이

    웹사이트 내 에있는 editbox에 키입력을하는건 성공을했는데 byname이 없고
    Classname&TagName 만 확인되는 버튼은 어떻게 클릭하는지 궁금합니다.

    driver.findElementsByClassName("btn").item[1].click() 이런식으로 작성을했는데 안되더군요..

    • 남성 2019.03.07 18:58 신고

      아래 주소 글 확인해보시면 사용가능한 함수 이름을 알수 있는데 FindElementByClass 라는함수를 사용해 보시는게 좋을것 같네요.

      https://iamaman.tistory.com/2307

+ Recent posts