안녕
-
python - selenium shadow dom 트러블슈팅프로그래밍/Python 파이썬 2022. 8. 3.
홈페이지의 구조가 바뀌어 크롤링이 막혔다. 이에 따른 해결 과정을 기록해 둔다. 문제 : HTML의 구조에 변경이 있음 일반적인 구조에서 shadow-root 이라는 dom이 생성되어져 있음. dom은 일반적인 방법으로는 요소 파싱이나 값을 바꿀 수 없음. 해결 : selenium 라이브러리의 자바스크립트를 사용할 수 있게 해주는 메소드를 이용하여 해당 페이지에서의 HTML 태그 내부 value 값을 바꾸었음. # shadow-root dom 회피 id = "'test'" pwd = "'test'" driver.execute_script("document.getElementsByName('name 태그')[0].value=" + id) driver.execute_script("document.getEle..
-
python - selenium 창 크기 옵션 주의점프로그래밍/Python 파이썬 2022. 8. 3.
셀레니움에 아무 옵션을 주지 않는다면 기본적으로 창 모드로 실행이 됨. 즉 셀레니움의 대상 사이트가 자체적으로 창 크기에 따른 반응형 홈페이지라면 HTML의 내부 요소들이 변경이 됨. 요소 파싱을 할 수 없게될 가능성이 있음. ex) 창 크기를 줄이면 모바일 사이즈로 자동으로 변경되는 사이트 나는 항상 풀 스크린 기준으로 요소의 속성들을 따내기 때문에 옵션에 풀 스크린 옵션과, 윈도우 사이즈 옵션을 기본적으로 주고 시작함. options = webdriver.ChromeOptions() options.add_argument('window-size=1920x1080') # pc용 사이즈 options.add_argument('--start-maximized') # 브라우저가 최대화된 상태로 실행 위 옵션을..
-
의존성 주입할때 생성자 생성을 통해 해야하는 이유프로그래밍/Spring 스프링 2022. 7. 26.
의존성을 주입 할 때 보통 @Autowired를 사용해서 의존성을 주입 했었는데. 솔직히 이렇게 주입하는게 편하다. 괜히 auto가 아님. 간단한 코드이거나 프로젝트의 구성이 복잡하기 않을 경우, 개인 테스트용 프로젝트 에는 크게 상관이 없지만 실무에서 사용할때는 어노테이션을 사용해서 의존성을 주입 하는 것 보다는 생성자를 만들어서 의존성을 주입 하는게 좋다. (물론 실무라고 어노테이션을 사용하면 안좋다는 뜻은 아님.) 어노테이션을 사용한 의존성 주입 @Component public class MadExample { @Autowired private HelloService helloService; } 보통 MVC 구성의 프로젝트에서 Service단을 Controller에서 사용하기 위해서 이러한 구성의 ..
-
프로그래머스 - 3진법 뒤집기알고리즘 2022. 7. 22.
내 풀이 public class P_39 { public int solution(int n) { int answer = 0; StringBuilder sb = new StringBuilder(); while(n > 0) { if(n % 3 == 0) { sb.append(0); } else { sb.append(n % 3); } n = n / 3; } String x = sb.toString(); answer = Integer.parseInt(x, 3); // parseInt() 메소드는 첫번째 인자에 String 형태의 숫자 // 두번째 인자에 몇 진수를 10진수로 변경할건지 넣어주면 된다. // 3진수를 10진수로 바꿔야 하니까 두번째 인자에 3을 넣는다. return answer; } public ..
-
프로그래머스 - 예산알고리즘 2022. 7. 21.
내 풀이 import java.util.Arrays; public class P_38 { public int solution(int[] d, int budget) { int answer = 0; int cost = 0; Arrays.sort(d); // 1 2 3 4 5 for(int i=0; i budget) { // 원소 + 원소 > 예산 break break; } else { // 예산보다 작으면 cost에 저장 answer 회수 증가 cost += d[i]; answer++; } } return answer; } public static void main(String[] args) { // 예산 P_38 p = new P_38(); int[] d = {1,3,2,5,4}; int budget = ..
-
프로그래머스 - 비밀 지도 [2018 KAKAO BLIND RECRUITMENT]알고리즘 2022. 7. 6.
내 풀이 import java.util.Arrays; import java.util.Stack; public class P_36 { public static String[] binary(int x, int n) { // 10진수 -> 2진수 변환 메소드 Stack stack = new Stack(); String[] list = new String[n]; // 2진수 저장 배열 (방크기는 한변의 길이 n) for(int i=x; i>=1; i=i/2) { // 10진수 -> 2진수로 변환 if(i%2 == 1) { stack.push("1"); } else if(i%2 == 0) { stack.push("0"); } } if(stack.size() != n) { int check = 0; for(int ..