Selenium根本无法识别网站(https://www.immowelt.de/expose/2ult44w)上的HTML元素。但我希望能够解决这些问题。我仍然知道元素“ body”没有任何问题,但是“ div [@ class ='cdk-overlay-container']”不是。不引发错误。
from selenium import webdriver
import time
driver = webdriver.Chrome('C:\\go2\\installation\\chromedriver.exe')
driver.get("https://www.immowelt.de/expose/2ult44w");
driver.execute_script("return document.readyState") == "complete"
time.sleep(10)
#just so that a message is clicked away:
datenschutz = driver.find_elements_by_xpath("//button[@id='uc-btn-accept-banner']")
if len(datenschutz) > 0: datenschutz[0].click()
#that is not recognized:
example = driver.find_elements_by_xpath("//div[@class='cdk-overlay-container']")
print("Counts:"+str(len(example))) #result: Counts:0
由于元素存在于iframe
中而无法找到它的原因。
您需要先切换到iframe
。
切换到iframe产生WebDriverWait
()并等待frame_to_be_available_and_switch_to_it
()
和
产生WebDriverWait
()并等待presence_of_all_elements_located
()
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome('C:\\go2\\installation\\chromedriver.exe')
driver.get("https://www.immowelt.de/expose/2ult44w")
btn=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[@id='uc-btn-accept-banner']")))
driver.execute_script("arguments[0].click();", btn)
WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"externalViewerStage")))
example=WebDriverWait(driver,20).until(EC.presence_of_all_elements_located((By.XPATH,"//div[@class='cdk-overlay-container']")))
print("Counts:"+str(len(example)))
driver.switch_to.default_content()