【2021년도판】Python + Selenium 자주 사용하는 조작 메소드 정리
소개
웹 스크래핑으로 Selenium을 사용하고 있으며, 이것이 1 년 이상 지났습니다.
언제나 「어라?? 이것 어떻게 쓰는 거야??」가 되어, 매회 조사하고 있는 것 지루해하기 시작했으므로, 이 기사에 정리해 가기로 했습니다.
ChromeOptions
필요한 옵션을 설정하지 않으면 드물게 다음과 같은 시간 초과 오류가 발생합니다.
Timed out receiving message from renderer: 600.000
이 건에 대해서, Stack Overflow의 답변 에서는, 이하의 옵션 설정을 실시하면 문제 없다고 합니다. (덧붙여서 "쓸모없는 늘어나는 인수 옵션"이라고 불리고 있으며, 바로 그대로 ...)
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument("enable-automation")
options.add_argument("--headless")
options.add_argument("--no-sandbox")
options.add_argument("--disable-infobars")
options.add_argument('--disable-extensions')
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-browser-side-navigation")
options.add_argument("--disable-gpu")
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
prefs = {"profile.default_content_setting_values.notifications" : 2}
options.add_experimental_option("prefs",prefs)
driver = new ChromeDriver(options);
요소 탐색
부모 요소
driver.find_element_by_xpath('//div[@id="cnfm_btn"]').find_element_by_xpath('..')
자식 요소
driver.find_element_by_xpath('//div[@id="cnfm_btn"]/div')
다음 요소(이전)
driver.find_element_by_xpath("//p[@id='one']/preceding-sibling::p")
다음 요소(후)
driver.find_element_by_xpath("//p[@id='one']/following-sibling::p")
클래스 이름으로 찾기 (단수)
driver.find_element_by_class_name('content')
클래스 이름으로 찾기 (복수)
driver.find_elements_by_class_name('content')
텍스트 콘텐츠로 찾기
최근 React 등으로 작성된 사이트는 ID 등의 키를 이용하여 요소를 탐색하는 것이 어려워지고 있습니다.
예를 들어 Twitter는 로그인 버튼에 id="login"
와 요소를 식별하기 위한 키가 없기 때문에 탐색이 조금 어렵습니다. .
그래서 하나의 타개책으로 텍스트 내용에서 찾는 방법이 있습니다. (Stack Overflow의 답변)
· 부분 일치
driver.find_elements_by_xpath("//*[contains(text(), 'My Button')]")
· 완전 일치
driver.find_elements_by_xpath("//*[text()='My Button']")
ID, 클래스명(부분 일치)으로 검색
이쪽도 마찬가지로 React등으로 작성된 사이트는 ID, Class등의 키를 이용해 요소를 탐색하는 것이 어려워지고 있습니다. ID, 클래스 이름의 부분 일치로 찾는 방법이 있습니다.
driver.find_element_by_xpath("//div[contains(@class, 'playerStateIcon')]")
요소 조작
삭제
JavaScript를 실행하여 요소를 삭제할 수 있습니다.
#クラス名で特定して削除する場合
element = driver.find_element_by_class_name('classname')
driver.execute_script("""
var element = arguments[0];
element.parentNode.removeChild(element);
""", element)
명시적인 대기 처리
WebDriverWait.until 메서드를 사용하면 HTML 요소가 특정 상태가 될 때까지 기다리는 명시적 대기 시간을 설정할 수 있습니다. 자세한 내용은 여기 .
클릭 가능 여부 판정
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "cnfm_btn")))
선택 가능 여부 판정
WebDriverWait(driver, 10).until(EC.element_located_to_be_selected((By.ID, "cnfm_btn")))
Reference
이 문제에 관하여(【2021년도판】Python + Selenium 자주 사용하는 조작 메소드 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ssbb/items/306ec9a1dbecd77d001b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
필요한 옵션을 설정하지 않으면 드물게 다음과 같은 시간 초과 오류가 발생합니다.
Timed out receiving message from renderer: 600.000
이 건에 대해서, Stack Overflow의 답변 에서는, 이하의 옵션 설정을 실시하면 문제 없다고 합니다. (덧붙여서 "쓸모없는 늘어나는 인수 옵션"이라고 불리고 있으며, 바로 그대로 ...)
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument("enable-automation")
options.add_argument("--headless")
options.add_argument("--no-sandbox")
options.add_argument("--disable-infobars")
options.add_argument('--disable-extensions')
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-browser-side-navigation")
options.add_argument("--disable-gpu")
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
prefs = {"profile.default_content_setting_values.notifications" : 2}
options.add_experimental_option("prefs",prefs)
driver = new ChromeDriver(options);
요소 탐색
부모 요소
driver.find_element_by_xpath('//div[@id="cnfm_btn"]').find_element_by_xpath('..')
자식 요소
driver.find_element_by_xpath('//div[@id="cnfm_btn"]/div')
다음 요소(이전)
driver.find_element_by_xpath("//p[@id='one']/preceding-sibling::p")
다음 요소(후)
driver.find_element_by_xpath("//p[@id='one']/following-sibling::p")
클래스 이름으로 찾기 (단수)
driver.find_element_by_class_name('content')
클래스 이름으로 찾기 (복수)
driver.find_elements_by_class_name('content')
텍스트 콘텐츠로 찾기
최근 React 등으로 작성된 사이트는 ID 등의 키를 이용하여 요소를 탐색하는 것이 어려워지고 있습니다.
예를 들어 Twitter는 로그인 버튼에 id="login"
와 요소를 식별하기 위한 키가 없기 때문에 탐색이 조금 어렵습니다. .
그래서 하나의 타개책으로 텍스트 내용에서 찾는 방법이 있습니다. (Stack Overflow의 답변)
· 부분 일치
driver.find_elements_by_xpath("//*[contains(text(), 'My Button')]")
· 완전 일치
driver.find_elements_by_xpath("//*[text()='My Button']")
ID, 클래스명(부분 일치)으로 검색
이쪽도 마찬가지로 React등으로 작성된 사이트는 ID, Class등의 키를 이용해 요소를 탐색하는 것이 어려워지고 있습니다. ID, 클래스 이름의 부분 일치로 찾는 방법이 있습니다.
driver.find_element_by_xpath("//div[contains(@class, 'playerStateIcon')]")
요소 조작
삭제
JavaScript를 실행하여 요소를 삭제할 수 있습니다.
#クラス名で特定して削除する場合
element = driver.find_element_by_class_name('classname')
driver.execute_script("""
var element = arguments[0];
element.parentNode.removeChild(element);
""", element)
명시적인 대기 처리
WebDriverWait.until 메서드를 사용하면 HTML 요소가 특정 상태가 될 때까지 기다리는 명시적 대기 시간을 설정할 수 있습니다. 자세한 내용은 여기 .
클릭 가능 여부 판정
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "cnfm_btn")))
선택 가능 여부 판정
WebDriverWait(driver, 10).until(EC.element_located_to_be_selected((By.ID, "cnfm_btn")))
Reference
이 문제에 관하여(【2021년도판】Python + Selenium 자주 사용하는 조작 메소드 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ssbb/items/306ec9a1dbecd77d001b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
driver.find_element_by_xpath('//div[@id="cnfm_btn"]').find_element_by_xpath('..')
driver.find_element_by_xpath('//div[@id="cnfm_btn"]/div')
driver.find_element_by_xpath("//p[@id='one']/preceding-sibling::p")
driver.find_element_by_xpath("//p[@id='one']/following-sibling::p")
driver.find_element_by_class_name('content')
driver.find_elements_by_class_name('content')
driver.find_elements_by_xpath("//*[contains(text(), 'My Button')]")
driver.find_elements_by_xpath("//*[text()='My Button']")
driver.find_element_by_xpath("//div[contains(@class, 'playerStateIcon')]")
삭제
JavaScript를 실행하여 요소를 삭제할 수 있습니다.
#クラス名で特定して削除する場合
element = driver.find_element_by_class_name('classname')
driver.execute_script("""
var element = arguments[0];
element.parentNode.removeChild(element);
""", element)
명시적인 대기 처리
WebDriverWait.until 메서드를 사용하면 HTML 요소가 특정 상태가 될 때까지 기다리는 명시적 대기 시간을 설정할 수 있습니다. 자세한 내용은 여기 .
클릭 가능 여부 판정
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "cnfm_btn")))
선택 가능 여부 판정
WebDriverWait(driver, 10).until(EC.element_located_to_be_selected((By.ID, "cnfm_btn")))
Reference
이 문제에 관하여(【2021년도판】Python + Selenium 자주 사용하는 조작 메소드 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ssbb/items/306ec9a1dbecd77d001b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "cnfm_btn")))
WebDriverWait(driver, 10).until(EC.element_located_to_be_selected((By.ID, "cnfm_btn")))
Reference
이 문제에 관하여(【2021년도판】Python + Selenium 자주 사용하는 조작 메소드 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ssbb/items/306ec9a1dbecd77d001b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)