image source: pixabay
์ค๋์ Selenium์ด๋ผ๋ ๊ฐ๋ ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์น์๋ํ ์ฝ๋๋ฅผ ๋ง๋ค์ด ๋ณธ๋ค. ๋์ค์๋ testNg, Jenkins์ ์ฐ๋์ด ํ์ํ์ง๋ง ์ง๊ธ์ ์ผ๋จ ๊ฐ๋จํ ์ฝ๋๋ถํฐ ์์ํ๋ค.
๐ 1. ๋ง๋ค์ด ๋์ ํ๋ก์ ํธ src/main/java์์ package๋ฅผ ๋ง๋ ๋ค. package ์ด๋ฆ์ ๋ณดํต url์ ๊ฑฐ๊พธ๋ก ์ด๋ค๊ณ ํ๋ค. ์ ๊ทธ๋ฐ์ง๋ ๋ชจ๋ฅด์ง๋ง ์ผ๋จ ์ด ์๋ฌต์ ์ธ ๋ฃฐ์ ๋ฐ๋ฅด๋๋ก ํ๊ณ com.steem.webauto๋ผ๊ณ ๋ช
๋ช
ํ๋ค.
๐ 2. ๊ทธ package ์์์ ์ด๋ฒ์๋ Class๋ฅผ ๋ง๋ ๋ค. ํด๋์ค ์ด๋ฆ์ ์ฒซ๊ธ์ ๋๋ฌธ์๋ก ๋ช
์ฌ๋ก ํ๋ฉด ๋๋ค. ์ด๊ฒ๋ ๋ฃฐ์ด๋ค. Steemit์ผ๋ก ์
๋ ฅํ๊ณ ํ๋จ public static void main(String[] args)์ ์ฒดํฌํด ์ฃผ๋ฉด ์๋์ผ๋ก java ๋ฉ์ธ ์ฝ๋๊ฐ ์์ฑ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด ์ฝ๋์์ ์ฝ๋๋ฅผ ์
๋ ฅํ์ฌ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ ์ดํ๋ฉด ๋๋ค.
๐ 3. ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ์์ฌ ์ฐจ๋ก๋ค. Selenium ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋
https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java
์ด ํ์ด์ง๋ก ์ ์ํ๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ด ๋ณด์ด๋๋ฐ ํ์ฌ 4.0 ์ํ๋ฒ์ ๊น์ง ๋์์๋ค. (๊ตฌ๊ธ์์ selenium webdriver dependency๋ก ๊ฒ์ํด๋ ๋๋ค.) ์ํ๋ฒ์ ์ ๋ถ์์ ํ ์ ์์ด 3.x์ ์ต์ ๋ฒ์ ์ ํด๋ฆญํ๋ฉด Maven, Gradle ๋ฑ ํญ์ด ๋ณด์ด๋๋ฐ ์ฐ๋ฆฌ๋ Maven์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์์ผ๋ Maven ํญ์ ๋ด์ฉ์ ๋ณต์ฌํ๋ค.
๐ 4. ๋ค์ IDE๋ก ๋์๊ฐ ํ๋ก์ ํธ root์ ์๋ pom.xml ํ์ผ์ ์ด๊ณ , xml ํฌ๋งท์ผ๋ก ๋์ด ์๋ ํ์ผ์์ <version> ํ๊ทธ ์๋์ <dependencies>,</dependencies>๋ฅผ ์ถ๊ฐํ๋ค.
๐ 5. ์ถ๊ฐํ ๋ ํ๊ทธ ์ฌ์ด์ step3์์ ๋ณต์ฌํ ํ
์คํธ๋ฅผ ๋ถ์ฌ๋ฃ๊ณ ์ ์ฅํ๋ฉด ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๋ด๋ ค๋ฐ์ผ๋ฉฐ ํ๋ก๊ทธ๋ ์ค๋ฐ๊ฐ ๋
ธ์ถ๋๊ฑฐ๋ ์ฐ์ธกํ๋จ์ ๋ค์ด๋ก๋ ์ํ๊ฐ ๋ณด์ธ๋ค. ์ฒ์ ๋ค์ด๋ก๋ ์์๋ ์๊ฐ์ด ๊ฝค ๊ฑธ๋ฆฌ๋ ์ด ์ฌ์ด ์ด๊ธ์ ์ฌ์ฉ๋ ์บก์ณ ์ด๋ฏธ์ง๋ฅผ ํธ์งํ๋ฉด์ ๋๊ธํ๊ฒ ๊ธฐ๋ค๋ฆฐ๋ค. (์ฐธ๊ณ ๋ก ์ฝ๋๋ฅผ ์์๊ฒ ์ ๋ ฌํ๋ ๋จ์ถํค๋ ctrl + shift + f ๋ค.)
๐ 6. ์๋ฃ๋๋ฉด ์ข์ธก ํ๋ก์ ํธ์ Maven Dependancies ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๊ธฐ๊ณ ํผ์ณ์ Selenium์ ๊ฐ์ข
๋ธ๋ผ์ฐ์ driver๊ฐ ๋
ธ์ถ๋๋ฉด ์ฑ๊ณต์ด๋ค.
๐ 7. ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก WebDriverManager ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์นํด๋ณด์. ๊ตณ์ด ์ํด๋ ๋๊ธด ํ์ง๋ง ์์ผ๋ฉด ์ฝ๋๊ฐ ํจ์ฌ ๊ฐ๊ฒฐํด์ง๋ค. ์๋ ์นํ์ด์ง์์ ๋ณต์ฌ ๊ฐ๋ฅํ๋ค.
https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager/3.7.1
(๊ตฌ๊ธ์์ selenium webdriver manager dependency๋ก ๊ฒ์ํด๋ ๋๋ค.)
๐ 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();
}
}
.
.
.
.
[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 ์์ ๋ฐ์ ์ ์๋ค.