python - Selenium Webdriver (Python) - 无法在嵌套 iframe 中定位元素
问题描述
我正在尝试从网页中的 iframe 中抓取一些数据。该网页的 URL 是https://www.nissanoflithiasprings.com/schedule-service。我正在尝试访问下图中显示的按钮:
当我右键单击按钮(位于 iframe 内)查看源代码时,我能够看到 HTML id 和名称(见下面的截图):
按钮的“id”是“new_customer_button”。但是,当我使用 selenium webdriverdriver.find_element_by_id("new_customer_button")
访问按钮时,代码无法在 iframe 中找到按钮并引发以下错误:
NoSuchElementException: no such element: Unable to locate element: {"method":"id","selector":"new_customer_button"}
以下是我到目前为止尝试过的代码:
from selenium import webdriver
chrome_path = r"C:\Users\gh455\Downloads\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("https://www.nissanoflithiasprings.com/schedule-service")
dest_iframe = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to.frame(dest_iframe)
driver.find_element_by_id("new_customer_button")
不知道为什么会这样。任何帮助将不胜感激。谢谢!
解决方案
元素在多个<iframe>
标签内,需要一一切换。您还应该最大化窗口并使用显式等待,因为它需要一些时间来加载
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
chrome_path = r"C:\Users\gh455\Downloads\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.maximize_window()
driver.get("https://www.nissanoflithiasprings.com/schedule-service")
wait = WebDriverWait(driver, 10)
# first frame - by css selector
wait.until(ec.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, '[src^="https://consumer.xtime.com"]')))
# second frame - by ID
wait.until(ec.frame_to_be_available_and_switch_to_it('xt01'))
driver.find_element_by_id("new_customer_button")
推荐阅读
- php - 无法在 cent OS(生产服务器)中将 Windows 共享打印机与 samba 共享连接
- ajax - 在异常上下文中使用 affjax http 请求
- mongodb - 匹配日期的 MongoDb/Mongoose 聚合问题
- arrays - 为什么在通用 Array where 子句中必须使用 required 关键字 init?
- python - 对 TensorFlow 服务的预测 API 的请求返回错误“缺少输入”
- ios-simulator - 无法查找服务 com.apple.CoreSimulator.host_support: 0x3
- apache-camel - 如何在 Camel 路由上设置用户定义的元数据或在配置时进行交换
- django - 导入名为中间件的模块时出错
- windows-installer - cx_Freeze msi 安装后
- python - 具有间隔 Gurobi 约束的图形着色