通过 Selenium 选择元素不起作用

selecting elements through Selenium is not working

网站上有 HTML 个元素 (https://www.immowelt.de/expose/2ult44w) Selenium 根本无法识别。但我希望能够解决这些问题。我仍然可以毫无问题地识别元素 "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()