"Selenium"의 두 판 사이의 차이
(같은 사용자의 중간 판 7개는 보이지 않습니다) | |||
4번째 줄: | 4번째 줄: | ||
==크롬 드라이버 설치== | ==크롬 드라이버 설치== | ||
+ | |||
+ | === 데비안 계열 === | ||
$ sudo apt install chromium-chromedriver | $ sudo apt install chromium-chromedriver | ||
+ | 버전이 맞지 않을 경우 수동다운로드: https://chromedriver.chromium.org/downloads | ||
== 샘플코드 == | == 샘플코드 == | ||
17번째 줄: | 20번째 줄: | ||
driver.close() | driver.close() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | == WebDriver == | ||
+ | |||
+ | === Trouble shooting === | ||
+ | |||
+ | ==== Errors ==== | ||
+ | |||
+ | ===== Understanding Common Errors ===== | ||
+ | |||
+ | ====== Stale Element Reference Exception ====== | ||
+ | 웹 요소의 참조가 유효하지 않은 경우에 발생하는 예외입니다. | ||
+ | |||
+ | Common Causes | ||
+ | |||
+ | 페이지가 새로고침되거나 동적으로 변경되거나, 다른 페이지로 이동하거나, 다른 창이나 프레임이나 아이프레임으로 전환되는 경우에 발생할 수 있습니다. | ||
+ | |||
+ | Common Solutions | ||
+ | |||
+ | * '''DOM이 변경된 경우''': 페이지가 새로고침되거나 요소가 이동된 경우, 원하는 셀렉터를 가진 요소가 여전히 페이지에 존재하지만, 기존에 사용하던 요소 객체로는 접근할 수 없게 됩니다. 이 경우에는 요소를 다시 탐색해야 합니다. 이는 다음과 같은 두 가지 방법으로 할 수 있습니다: | ||
+ | ** '''웹 요소를 다른 객체로 감싸기''': 웹 요소를 셀렉터를 저장하고 셀레니움 요소를 캐시하는 다른 객체로 감쌉니다. 이 감싼 객체로 작업을 수행할 때, 이전에 탐색했던 캐시된 객체를 사용하려고 하고, 만약 요소가 오래되었다면 예외를 잡아서 저장된 셀렉터로 요소를 다시 탐색하고, 메소드를 다시 시도합니다. 이 방법은 효율적이지만, 페이지가 변경된 후에 사용하는 셀렉터가 다른 요소를 참조하게 되어 원하는 요소가 아닌 경우 문제가 발생할 수 있습니다. | ||
+ | ** '''요소 객체를 특정 컨텍스트에 저장하기''': 요소 객체는 주어진 컨텍스트에 저장되므로, 다른 컨텍스트로 이동하면 요소 참조는 여전히 유효하지만 일시적으로 접근할 수 없게 됩니다. 이 경우에는 요소를 다시 탐색해도 도움이 되지 않습니다. 왜냐하면 현재 컨텍스트에는 요소가 존재하지 않기 때문입니다. 이 문제를 해결하려면, 요소를 사용하기 전에 올바른 컨텍스트로 다시 전환해야 합니다2. | ||
+ | * '''다른 페이지로 이동한 경우''': 단순히 컨텍스트를 변경한 것이 아니라 다른 페이지로 이동하여 요소가 위치한 컨텍스트를 파괴한 경우입니다. 이 경우에는 현재 컨텍스트에서 요소를 다시 탐색할 수 없고, 유효한 컨텍스트로 다시 전환할 수도 없습니다. 이런 이유로 오류가 발생한 경우, 올바른 위치로 다시 이동하고 요소를 다시 탐색해야 합니다. | ||
+ | |||
+ | == Grid == | ||
+ | https://www.selenium.dev/documentation/grid/getting_started/ | ||
==외부링크== | ==외부링크== | ||
− | https://selenium.dev/documentation/en/webdriver/ | + | selenium Web Driver 개발문서: https://selenium.dev/documentation/en/webdriver/ |
+ | |||
+ | 한글: https://www.selenium.dev/documentation/ko/ | ||
+ | [[분류:라이브러리]] | ||
+ | [[분류:네트워크]] |
2023년 11월 8일 (수) 00:21 기준 최신판
목차
설치[편집 | 원본 편집]
$ pip3 install selenium
크롬 드라이버 설치[편집 | 원본 편집]
데비안 계열[편집 | 원본 편집]
$ sudo apt install chromium-chromedriver
버전이 맞지 않을 경우 수동다운로드: https://chromedriver.chromium.org/downloads
샘플코드[편집 | 원본 편집]
from selenium import webdriver
# 드라이버 생성
# which chromedriver 의 위치를 넣어준다.
driver = webdriver.Chrome("/usr/bin/chromedriver")
driver.get("http://google.com")
html = driver.page_source
driver.close()
WebDriver[편집 | 원본 편집]
Trouble shooting[편집 | 원본 편집]
Errors[편집 | 원본 편집]
Understanding Common Errors[편집 | 원본 편집]
Stale Element Reference Exception[편집 | 원본 편집]
웹 요소의 참조가 유효하지 않은 경우에 발생하는 예외입니다.
Common Causes
페이지가 새로고침되거나 동적으로 변경되거나, 다른 페이지로 이동하거나, 다른 창이나 프레임이나 아이프레임으로 전환되는 경우에 발생할 수 있습니다.
Common Solutions
- DOM이 변경된 경우: 페이지가 새로고침되거나 요소가 이동된 경우, 원하는 셀렉터를 가진 요소가 여전히 페이지에 존재하지만, 기존에 사용하던 요소 객체로는 접근할 수 없게 됩니다. 이 경우에는 요소를 다시 탐색해야 합니다. 이는 다음과 같은 두 가지 방법으로 할 수 있습니다:
- 웹 요소를 다른 객체로 감싸기: 웹 요소를 셀렉터를 저장하고 셀레니움 요소를 캐시하는 다른 객체로 감쌉니다. 이 감싼 객체로 작업을 수행할 때, 이전에 탐색했던 캐시된 객체를 사용하려고 하고, 만약 요소가 오래되었다면 예외를 잡아서 저장된 셀렉터로 요소를 다시 탐색하고, 메소드를 다시 시도합니다. 이 방법은 효율적이지만, 페이지가 변경된 후에 사용하는 셀렉터가 다른 요소를 참조하게 되어 원하는 요소가 아닌 경우 문제가 발생할 수 있습니다.
- 요소 객체를 특정 컨텍스트에 저장하기: 요소 객체는 주어진 컨텍스트에 저장되므로, 다른 컨텍스트로 이동하면 요소 참조는 여전히 유효하지만 일시적으로 접근할 수 없게 됩니다. 이 경우에는 요소를 다시 탐색해도 도움이 되지 않습니다. 왜냐하면 현재 컨텍스트에는 요소가 존재하지 않기 때문입니다. 이 문제를 해결하려면, 요소를 사용하기 전에 올바른 컨텍스트로 다시 전환해야 합니다2.
- 다른 페이지로 이동한 경우: 단순히 컨텍스트를 변경한 것이 아니라 다른 페이지로 이동하여 요소가 위치한 컨텍스트를 파괴한 경우입니다. 이 경우에는 현재 컨텍스트에서 요소를 다시 탐색할 수 없고, 유효한 컨텍스트로 다시 전환할 수도 없습니다. 이런 이유로 오류가 발생한 경우, 올바른 위치로 다시 이동하고 요소를 다시 탐색해야 합니다.
Grid[편집 | 원본 편집]
https://www.selenium.dev/documentation/grid/getting_started/
외부링크[편집 | 원본 편집]
selenium Web Driver 개발문서: https://selenium.dev/documentation/en/webdriver/