[JAVA #3] [Web Automation #3] Controlling STEEMIT web pages with Selenium #1 [KR]steemCreated with Sketch.

in #kr5 years ago (edited)

redsjavahouse1591357_1280.jpg
image source: pixabay


오늘은 Selenium이라는 강력한 라이브러리로 웹자동화 코드를 만들어 본다. 나중에는 testNg, Jenkins에 연동이 필요하지만 지금은 일단 간단한 코드부터 시작한다.

create1.png
👆 1. 만들어 놓은 프로젝트 src/main/java에서 package를 만든다. package 이름은 보통 url을 거꾸로 쓴다고 한다. 왜 그런지는 모르지만 일단 이 암묵적인 룰을 따르도록 하고 com.steem.webauto라고 명명한다.

create2.png
👆 2. 그 package 위에서 이번에는 Class를 만든다. 클래스 이름은 첫글자 대문자로 명사로 하면 된다. 이것도 룰이다. Steemit으로 입력하고 하단 public static void main(String[] args)에 체크해 주면 자동으로 java 메인 코드가 작성되는 것을 볼 수 있다. 이 코드안에 코드를 입력하여 브라우저를 제어하면 된다.

create3.png
👆 3. 필요한 라이브러리를 받아올 차례다. Selenium 라이브러리는
https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java
이 페이지로 접속하면 라이브러리 버전이 보이는데 현재 4.0 알파버전까지 나와있다. (구글에서 selenium webdriver dependency로 검색해도 된다.) 알파버전은 불안정할 수 있어 3.x의 최신 버전을 클릭하면 Maven, Gradle 등 탭이 보이는데 우리는 Maven으로 프로젝트를 만들었으니 Maven 탭의 내용을 복사한다.

create4.png
👆 4. 다시 IDE로 돌아가 프로젝트 root에 있는 pom.xml 파일을 열고, xml 포맷으로 되어 있는 파일에서 <version> 태그 아래에 <dependencies>,</dependencies>를 추가한다.

create5.png
👆 5. 추가한 두 태그 사이에 step3에서 복사한 텍스트를 붙여넣고 저장하면 이 라이브러리를 자동으로 내려받으며 프로그레스바가 노출되거나 우측하단에 다운로드 상태가 보인다. 처음 다운로드 시에는 시간이 꽤 걸리니 이 사이 이글에 사용될 캡쳐 이미지를 편집하면서 느긋하게 기다린다. (참고로 코드를 예쁘게 정렬하는 단축키는 ctrl + shift + f 다.)

create6.png
👆 6. 완료되면 좌측 프로젝트에 Maven Dependancies 라이브러리가 생기고 펼쳐서 Selenium의 각종 브라우저 driver가 노출되면 성공이다.

create7.png
👆 7. 같은 방법으로 WebDriverManager 라이브러리도 설치해보자. 굳이 안해도 되긴 하지만 있으면 코드가 훨씬 간결해진다. 아래 웹페이지에서 복사 가능하다.
https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager/3.7.1
(구글에서 selenium webdriver manager dependency로 검색해도 된다.)

create8.png
👆 8. step2에서 만들어 놓은 코드로 돌아와서 main 블럭안에 아래 코드를 입력한다.

블럭 내 코드를 요약하면
13줄. step7에서 받아온 라이브러리로 chromedriver를 셋팅한다. 직접 코드를 입력해도 가능하지만 코드가 길어지고 유지보수가 여간 어렵지 않아 web driver manager 라이브러리로 대신한다.( System.setproperty("webdriver.chrome.driver", "chromedriver 경로") 로 대신해도 되지만 chromedriver를 직접 다운로드해야 하는 번거로움이 있다.)
14줄. Chromedriver 인스턴스를 생성한다.
15줄. https://steemit.com/@june0620/feed 로 이동한다.
16줄. 크롬 창을 최대로 설정한다.
17줄. 페이지에서 대세글이라는 태그를 불러온 후 클릭하고 2초 대기한다.
21줄. 크롬창을 종료한다.

package com.steem.webatuo;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import io.github.bonigarcia.wdm.WebDriverManager;

public class Steemit {

 public static void main(String[] args) throws InterruptedException {
 WebDriverManager.chromedriver().setup();
 WebDriver driver = new ChromeDriver();
 driver.get("https://steemit.com/@june0620/feed");
 driver.manage().window().maximize();
 WebElement trending = driver.findElement(By.linkText("대세글"));
 trending.click();
 Thread.sleep(2000);
 
 driver.quit();
 }

}
시연 영상:

https://youtu.be/1e8sZIJMZJY

.
.
.
.
[Cookie ]
step7의 WebDriverManager는 다운로드 받지 않을 경우 코드는 아래처럼 바꿔주면 된다. 유지보수가 조금 어렵지만 WebDriverManager 매니저 내부 코드도 결국은 이 방법을 사용하기때문에 이 방법도 알아두는게 좋겠다.
AS-IS:

WebDriverManager.chromedriver().setup();

TO-BE:

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");

두번째 인자는 chromedriver파일 경로이고, 파일은 https://chromedriver.chromium.org/downloads 에서 받을 수 있다.

Sort:  

@tipu curate 🐣🐣🐣^^

오래만입니다~
감사합니다😃

Posted using Partiko Android

잘지내시죠? ㅎㅎ
티프 세치기 당했네.ㅋㅋ

네~ 잘 지내고 있습니다~
프리곤님도 잘 지내시죠?
2020년 행복하세요😃

来自于 [WhereIn Android] (http://www.wherein.io)

Hi~ june0620!
@yanhan has gifted you 1 SHOP!

Currently you have: 173 SHOP

View or Exchange SHOP Please go to steem-engine.com.

Are you bored? Play Rock,Paper,Scissors game with me!

Thanks🤩

Posted using Partiko Android


Hey @june0620, here is a little bit of BEER from @benedict08 for you. Enjoy it!

Learn how to earn FREE BEER each day by staking.

@tipu curate
!shop
Hi我来了😁

来自于 [WhereIn Android] (http://www.wherein.io)

今天换个账号 哈哈
多谢tipu😃😋

Posted using Partiko Android

你今天过的开心吗?你好!家中可愛的寵物照想要跟大家分享嗎?或是出去玩拍到一些可愛的動物,別忘了到@dpet分享,可以得到@dpet的獎勵喔!假如我的留言打扰到你,请回复“取消”。

what a genius

thanks 🤩🤩

来自于 [WhereIn Android] (http://www.wherein.io)