로그인 자동화
package selenium;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class SeleniumTest {
public static void main(String[] args) {
SeleniumTest selTest = new SeleniumTest();
selTest.crawl();
}
//WebDriver
private WebDriver driver;
//Properties
public static final String WEB_DRIVER_ID = "webdriver.chrome.driver";
public static final String WEB_DRIVER_PATH = "C:/selenium/chromedriver.exe";
//크롤링 할 URL
private String base_url;
public SeleniumTest() {
super();
//System Property SetUp
System.setProperty(WEB_DRIVER_ID, WEB_DRIVER_PATH);
//Driver SetUp (드라이버 옵션 설정)
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized"); // 브라우저 최대 크기로 실행
options.addArguments("--disable-popup-blocking"); // 팝업 창 무시하기
driver = new ChromeDriver(options);
base_url = "https://www.naver.com//";
}
public void crawl() {
try {
driver.get(base_url); //get page (= 브라우저에서 url을 주소창에 넣은 후 request 한 것과 같다)
Thread.sleep(2000); //페이지 로딩 대기 시간
// 4. 로그인 버튼 클릭
WebElement element = driver.findElement(By.className("link_login"));
element.click();
Thread.sleep(1000);
// ID 입력
element = driver.findElement(By.id("id"));
element.sendKeys("아이디");
// 비밀번호 입력
element = driver.findElement(By.id("pw"));
element.sendKeys("비밀번호");
// 전송
element = driver.findElement(By.className("btn_login"));
element.submit();
} catch (Exception e) {
e.printStackTrace();
} finally {
//driver.close(); // 브라우저 종료
}
}
}
메서드
메서드 | 설명 |
driver.findElement() | 단일 요소 선택 |
driver.findElements() | 복수 요소 선택 |
By.className(" ") | 클래스 이름으로 element 찾기 |
By.id(" ") | 아이디로 element 찾기 |
By.cssSelector(" ") | css 선택자로 element 찾기 |
By.name(" ") | name으로 element 찾기 |
By.xpath(" ") | xpath로 element 찾기 |
By.linkText(" ") | 하이퍼 링크의 텍스트로 찾기 (완전 일치) |
By.partialLinkText(" ") | 하이퍼 링크의 텍스트로 찾기 (포함) |
By.tagName(" ") | 태그 이름으로 element 찾기 |
element.click() | 버튼 클릭 |
element.sendKeys(str) | 텍스트 입력 |
element.submit() | 서버로 전송 (제출) |
driver.manage().timeouts().implicitlyWait(시간, TimeUnit.SECONDS) | 탐색시 object가 없으면 대기하는 시간 |
driver.close() | 브라우저를 종료 |
driver.getAttribute("속성") | 속성 값 가져옴 |
ex)
driver.findElement(By.cssSelector("input[name='first_name']"));
선택자 경로 & xpath 값 찾기
개발자 모드 -> 태그 마우스 오른쪽 클릭 -> copy 메뉴 -> xpath와 css selector 경로 등 확인 가능
* 모든 사이트들은 접근에 대한 내용을 robot.txt라는 파일 안에 적어둔다. (사이트 주소 뒤에 /robot.txt를 붙이면 확인가능)
로봇의 접근을 허용하면 Allow, 허용하지 않으면 Disallow
<로봇 배제 표준 참조>
https://ko.wikipedia.org/wiki/%EB%A1%9C%EB%B4%87_%EB%B0%B0%EC%A0%9C_%ED%91%9C%EC%A4%80
로봇 배제 표준 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 로봇 배제 표준(robots exclusion standard), 로봇 배제 프로토콜(robots exclusion protocol)은 웹 사이트에 로봇이 접근하는 것을 방지하기 위한 규약으로, 일반적으로 접근
ko.wikipedia.org
참조
https://todaycode.tistory.com/5
자바로 셀레니움(Selenium)을 써보자 :: 크롤링
1. 셀레니움이란? 2. 셀레니움 사용법 2-1. Chrome 버전 확인 2-2. Chrome WebDriver 다운로드 3. 웹페이지 분석 4. 코드 작성 5. 크롤링 5-1. 셀레니움으로 크롤링을 하는 이유 5-2. 정적 페이지? 동적 페이지?..
todaycode.tistory.com
https://devqa.io/selenium-css-selectors/
Selenium CSS Selectors Examples
Locating elements by CSS selectors is the preferred way as it is faster and more readable than XPath.This tutorial provides examples of how to loca...
devqa.io
https://nowonbun.tistory.com/42
[Java] Selenium을 사용하는 방법
안녕하세요. 명월입니다. 이 글은 Java에서 Selenium을 사용하는 방법에 대한 글입니다. Selenium에 대해서 Python이나 C#으로 소개를 한 적이 있습니다. Selenium은 브라우져의 API를 이용하여 웹 화면 테스
nowonbun.tistory.com
'1. 프로그래밍 > 1-2. Java' 카테고리의 다른 글
JAVA - [2진수,8진수,16진수 <-> 10진수] (0) | 2023.01.23 |
---|---|
Java - [ Selenium으로 크롤링 ] (0) | 2022.09.28 |
JAVA - [ 정규식 이용 특수문자 변환 (replaceAll) ] (0) | 2022.09.08 |
Java - [ 2차원 배열 정렬 ] (0) | 2022.07.29 |
Java - [ SHA-256 해시 암호화 알고리즘 ] (0) | 2022.07.05 |