通过硒选择元素不起作用

问题描述 投票:0回答:1

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
python selenium xpath iframe webdriverwait
1个回答
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()
© www.soinside.com 2019 - 2024. All rights reserved.