通过 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()
网站上有 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()