전체 글 134

[Selenium] Expected Conditions(EC)

파이썬에서 코드 동작을 멈추기 위해서 time.sleep()을 사용해도 되지만, 특정 조건을 만족할 때까지 정지하도록 하는 코드를 사용할 수 있다 from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome(options=chrome_options) WebDriverWait(driver, 5).until( EC.element_to_be_clickable((By.XPATH, f'{xpath}')) ) 사용은 위와 같이 하면 된다 위 예시에서는 해당 element가 클릭 가능한 상태가 될 때까지 최대 5초간 기다린다 5초가 지나기 전에 조건을 만족하면 진행되고, 5초가 지나도 조건을 만족하지 못하면 에러가 ..

Programing/Python 2024.04.05

[Selenium] 드롭다운 메뉴 선택하기

from selenium.webdriver.support.select import Select dropdown_element = driver.find_element(By.XPATH, f'{xpath}') dropdown_select = Select(dropdown_element) dropdown_select.select_by_value("1") selenium의 Select를 이용해서 드롭다운 메뉴를 선택할 수 있다 dropdown_select.select_by_value("1") dropdown_select.select_by_index(1) dropdown_select.select_by_visible_text('옵션3') 여러 방법으로 드롭다운 메뉴 중 하나를 선택할 수 있다

Programing/Python 2024.04.05

[Selenium] iframe

웹 페이지를 탐색하다 보면 분명 xpath 등을 그대로 복사해왔는데도 요소가 찾아지질 않는 문제가 발생하기도 한다 이는 iframe(inline frame, 페이지 속의 페이지) 때문이고, 해결하기 위해서는 해당 요소가 들어있는 iframe으로 이동한 뒤에 해당 요소를 찾아주어야 한다 ifrm = driver.find_element(By.CSS_SELECTOR, '#ifrm') driver.switch_to.frame(ifrm) iframe도 다른 html 요소들과 마찬가지로 selector나 xpath등이 존재하기 때문에 이를 이용하여 찾아주고, switch_to.frame() 함수를 이용해서 이동해 주면 된다 만약 iframe 안에 있는 iframe으로 이동하기 위해서는 위 과정을 두 번 거쳐 주면 ..

Programing/Python 2024.04.05

[Selenium] handle

셀레니움을 통해 웹페이지를 탐색하다 새로운 창이 뜨더라도 기존 창에서만 조작이 가능하고, 새로운 창의 요소에 대해서는 접근을 하지 못한다 따라서 handle을 변경하여 새로운 창에서도 요소들을 가져올 수 있게 해보겠다 main_window = driver.current_window_handle 이렇게 현재 창을 가져올 수 있다 for handle in driver.window_handles: if handle != main_window: driver.switch_to.window(handle) break 전체 창은 driver.window_handles로 가져올 수 있고, switch_to.window() 함수를 이용해 handle을 변경할 수 있다 main_window가 아닌 window_handle은..

Programing/Python 2024.04.05

[Selenium] 파이썬으로 Chrome 조작하기

터미널에서 pip install selenium으로 셀레니움을 설치해준다 (* selenium 4 이상부터는 크롬 드라이브 설치가 필요 없다) import time from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys 임포트 해 주고 chrome_options = Options() chrome_options.add_experimental_option("detach", True) 크롬 창이 자동으로 꺼지지 않게 옵션을 설정해 준다 driver = ..

Programing/Python 2024.04.05

[C#] Press 입력 받기

마우스 왼쪽 버튼을 길게 누르고 있는 경우를 판단하는 게 필요해서 기존의 InputManager를 수정하였다 public class InputManager { public Action MouseAction = null; private bool isPressed = false; private float _pressedTime; private float MIN_PRESS_TIME = 0.2f; public void OnUpdate() { if (Input.GetMouseButton(0)) { isPressed = true; _pressedTime += Time.deltaTime; if (_pressedTime >= MIN_PRESS_TIME) { MouseAction.Invoke(Define.MouseEve..

[Unity] 캐릭터의 움직임이 버벅거리는 문제(Rigidbody Interpolate)

캐릭터를 생성하고 시네머신 카메라를 이용해 follow를 시켰더니 간혹 버벅거리면서 이동하는 현상이 눈에 띄었다 Rigidbody 컴포넌트의 Interpolate(보간)을 조정해 주니 어느정도 해결되었다 None: 보간 X Interpolate: 이전 움직임을 기반으로 보정(Extrapolate보다 부드러운 움직임이 나온다) Extrapolate: 현재 velocity를 기준으로 오브젝트의 다음 position을 예측하여 움직임을 보정 https://docs.unity3d.com/ScriptReference/RigidbodyInterpolation.html 추가적으로 찾아보니 입력을 통해 플레이어를 움직이게 하는 경우 Extrapolate 보간이 더 유용하다고 한다

[C#] Coroutine 사용

1. 코루틴 이름 private void Start() { StartCoroutine(nameof(TestCoroutine)); // 코루틴 시작 StopCoroutine(nameof(TestCoroutine)); // 코루틴 정지 StartCoroutine(nameof(TestCoroutine)); // 코루틴 시작 } private IEnumerator TestCoroutine() { // 함수 } 코루틴 이름을 직접 명시하는 방식이다 * 매개변수를 전달할 수 없다 * stop coroutine으로 코루틴을 멈춘 후 다시 시작시킬 경우 이전 진행 상황은 초기화된다 2. 함수 private void Start() { StartCoroutine(TestCoroutine()); // 코루틴 시작 Start..

[C#] 반복문 내에서 List 요소 삭제 시 주의할 점

별 생각 없이 이런 식으로 for문을 돌렸는데, 위와 같은 식으로 코드를 작성하게 될 경우 반복문을 도는 중에 요소가 삭제되게 되면 특정 인덱스를 건너뛰는 상황이 발생할 수 있게 된다 for문 루프 도는 순서를 반대로 변경하면 중간에 특정 요소를 삭제하더라도 정상적으로 나머지 배열의 요소들을 탐색할 수 있게 된다

[Error] UnassignedReferenceException

원인은 target 변수를 public으로 지정해두는 바람에 0번에 None 오브젝트가 하나 생겨 있었다 인스펙터 창을 따로 건들인 기억이 없는데 왜 생성되어 있는지는 모르겠지만, private으로 변경하고 나니 시작할 때의 target count가 0으로 잘 설정된 것을 확인할 수 있었다 위와 같은 오류의 경우 해당 변수가 존재하지 않는다 정도의 뜻이니 해당 변수를 잘 확인해 볼 것