Selenium 및 Chrome 드라이버를 사용하고 있지만 ID로 요소를 찾을 수 없습니다. 그러나이 요소는 브라우저의 웹 속성에서 볼 수 있습니다. 요소가 동적으로 생성 되었기 때문에 (브라우저 URL 막대에 동일한 URL이 항상 표시되지만 내용이 동적으로 변경되기 때문에) 생각합니다.Selenium을 사용하여 동적으로 생성 된 중첩 요소 찾기
해결 방법은 드라이버 대기를 적절하게 언변하는 것입니다. 첫 번째 페이지는 다음과 같습니다. 나는 성공적으로 과거를 얻을 수 있습니다 로그인 페이지 :
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
delay = 5
username = driver.find_element_by_name('Username')
password = driver.find_element_by_name('Password')
username.send_keys('my_username')
password.send_keys('my_password')
login = driver.find_element_by_id('login_button')
login.click()
을 나는 성공적으로 내가이 클릭 한 후, button_a라고 불리는 요소를 찾을 수있는이 단계 후에는 페이지가 새로운 버튼이 말하는 생성 button_b,하는 대기 명령을 기다리는 중입니다.
button_a = driver.find_element_by_id('button_a')
button_a.click()
WebDriverWait(driver, delay).until(
EC.presence_of_element_located(
driver.find_element_by_id('button_b')))
드라이버가 오래된 DOM에 대한 참조를 유지하고 DOM에 추가 된 새로운 요소를 추적하지 않는 것 같다
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"button_b"}
, 페이지를 클릭 한 후 다시로드되지 않습니다 414,그러나 이것은 고전적인 예외를 throw button_a에 있지만 클라이언트가 동적으로 새 콘텐츠를 생성하는 클래식 스핀 휠을 얻었습니다. 이 시점에서 브라우저에서 마우스 오른쪽 버튼을 클릭 한 다음 button_b id가 존재하는지 명확하게 볼 수 있습니다.
셀렌으로 해결할 수 있습니까?
실례합니다. 웹 브라우저 자동화에서 방금 전적으로 멍청한 사람입니다.