본문 바로가기
  • Hope for the best, plan for the worst
Python

#Python Selenium 이용해서 Sharepoint 글 올리기 도전

by Qzin 2020. 5. 25.

새 아침은 밝았지만 내 정신상태는 그렇게 밝지가 않다. 오늘 또 요즘 진행하는 프로젝트 관련하여 데이터 다루는 부서에 무언가를 요청해야 했다.

 

나: 매일 뽑아주는 데이터에는 XX 제품들 데이터만 들어가 있는데 다른 제품들 데이터도 필요한데 혹시 가능할까? 
상대: 아, 네 가능하죠. 근데 오늘 급하게 처리해야 하는게 있으니 Collaboration 페이지에 올려 주세요!

관련 부서에서는 중구난방으로 요청되는 데이터 처리를 한 채널로 일원화 시키기 위해 Sharepoint 상에 공간을 만들고 거기에 요청을 올리면 담당자가 할당이 되고 그 담당자가 정해진 기간 안에 처리를 해주는 방식이다. 

 

친분을 이용하여 비벼볼까도 했는데 그래도 프로세스를 만들어놨으니 내가 따라줘야 나중에도 내가 혹은 우리 팀이 만든 프로세스를 잘 따라줄 것이라는 생각에 그렇게 하기로 한다. 크롬을 열고, 사이트에 접속해서 해당 페이지로 가고, 거기서 new item 눌러서 새로운 요청을 등록하고... 사실 복잡하거나 시간이 많이 걸리지는 않지만 그래도 나름 코딩을 배워 보겠다는 사람이니 이 마저도 한 번 그걸로 만들어 보려고 한다. 앞으로 요청할 일이 많은데 하나 만들어 두면 그래도 쏠쏠하게 쓰지 않겠냐는 생각에...

 

VS Code를 열어서 .py 파일을 하나 만든다. 이 프로그램을 열 때면 쥐뿔도 없고, 할 줄 아는 것도 없는데 마치 내가 무슨 프로그래머라도 된 것 같은 기분이 들어서 이걸 쓸 때마다 조금 설레임. 

 

from selenium import webdriver

 

이거 한 줄은 거침없이 써내려갔다. 그리고는 다음에 뭘 해야 할지 몰랐다 (...)

이럴 땐 역시 구글이다. 파이썬이 인기가 많아서 그런지, 그리고 또 그 중에서도 웹크롤링 등이 인기가 많아서 그런지 Selenium 검색하면 오만가지 정보가 뜨는데 내가 가장 최근에 본 내용을 참조로 또 한 줄 적어 본다. 

 

driver = webdriver.Chrome("C:\Users\user\AppData\Local\Programs\Python\chromedriver.exe")

 

한 번 실행해봤는데, 역시... 안된다... 역슬래쉬 어쩌구 하는거 보니 이게 뭔가 잘못되었나 보다 싶었는데 예전에 막 혼자 만지작 하면서 배웠던게 생각난다. 

 

driver = webdriver.Chrome(
    r"C:\Users\user\AppData\Local\Programs\Python\chromedriver.exe")

 

이게 이렇게 해결하는건지 모르겠다만 일단 1/2은 성공이다. 

1/2 성공인 이유는...

또 구글 검색... extension을 disable 하면 된단다. 

역시 Stackoverflow에는 없는게 없군... 하면서 아래의 코드를 넣어봤는데 역시나... 안 된다. 

 

ChromeOptions options = new ChromeOptions();
options. addArguments("--disable-extensions");
WebDriver driver = new ChromeDriver(options);

 

options에 밑줄이 계속 쳐있고 실행하면 자꾸 개같은 invalid syntax가 나온다. 계속 검색해보고 이것도 해보고 저것도 해보는데 똑같다. 안 된다. 또 안 된다. 

 

아, 그럼 얼마 전에 또 내가 SAP 리포트를 자동으로 뽑으려고 써본 pyautogui를 써볼 수 있겠다는 생각이 문득 들었다. 그냥 그거 써서 'enter' 한 번만 치면 그 다음은 알아서 잘 할거 아냐? 라며 야심차게 적어봤지만 안 된다. 더럽다. 

 

엔터 한 번은 쳐줄 수 있다며 그냥 저거는 무시하고 한다. 엔터만 눌러주니 Chrome 아주 잘 뜨고 원하는 사이트로도 잘 간다. 위에 링크를 걸어 놓은 사이트에서 사이트에서 원하는 곳을 클릭하는 것을 배우고 한 번 적용해봤다. 이것도 시행 착오를 걸치긴 했고, 다른 복잡한 사이트에서 만약 하라고 하면 쉽지 않을 것 같은 느낌... 하지만 지금은 내가 필요한 것만 하면 됨...

 

driver.implicitly_wait(1)
driver.get(
    "address")
driver.implicitly_wait(10)
driver.find_element_by_class_name('ms-list-addnew-imgSpan20').click()

 

이렇게 했더니 딱 내가 입력할 수 있는 화면까지 나왔다. 

일단은 여기까지. 

 

다음에는 고객사에서 동일하게 주는 엑셀 파일로 된 리포트를 우리 회사에서 사용하는 양식에 가져다 붙여 놓는 것을 좀 공부하고, 써먹어 볼까 한다. openpyxl 패키지(?)를 이용할건데 변동은 거의 없을 템플릿에 있는 자료를 가져다 붙여 놓는 것이니 한 번 만들어 놓으면 꿀 좀 빨 듯. 

 

조금씩 필요한 것들 위주로 쓰고 배우다 보면 쓸모가 좀 있겠지... 제발...

댓글