Python Selenium:在iframe中获取动态内容
我正试图从以下网页中获取可用的公寓列表: 我正在使用Selenium的Python实现,但到目前为止,我还没有找到一个有效的解决方案来以编程方式获取内容。我最基本的代码如下,目前只返回非动态HTML源代码:Python Selenium:在iframe中获取动态内容,python,html,selenium,dynamic,web-scraping,Python,Html,Selenium,Dynamic,Web Scraping,我正试图从以下网页中获取可用的公寓列表: 我正在使用Selenium的Python实现,但到目前为止,我还没有找到一个有效的解决方案来以编程方式获取内容。我最基本的代码如下,目前只返回非动态HTML源代码: from selenium import webdriver driver = webdriver.Chrome('/path_to_driver') driver.get('https://3160599v2.onlineleasing.realpage.com/') html = dr
from selenium import webdriver
driver = webdriver.Chrome('/path_to_driver')
driver.get('https://3160599v2.onlineleasing.realpage.com/')
html = driver.page_source
返回的html
变量不包含我需要的公寓列表
如果我使用Chrome的内置检查工具“检查”元素,我可以看到内容在未分类的iframe中:
在这个iframe中,您还可以看到div
,其中包含我需要的所有信息
我尝试过的其他解决方案包括实现显式WebDriverWait:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, 'main-content')))
我用这个方法得到了一个TimeoutException,因为找不到元素
我还尝试使用driver.switch_to.frame()
方法,但没有成功
让我从网页中获取公寓清单的唯一步骤是(使用Chrome):
如何以编程方式从网页中获取动态生成的内容?您无法直接看到iframe中的内容。你需要换个相框。您可以先选择“iframe元素”,然后使用
driver切换到它。切换到.frame()
函数
iframe = driver.get_element_by_id('iframe')
driver.switch_to.frame(iframe)
之后,您可以访问iframe的内容
或者,您可以使用iframe的source属性,然后使用selenium转到该页面。最后,iframe内容是另一个html页面。尝试使用以下代码切换到iframe:
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait
wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_xpath('//iframe[@realpage-oll-widget="RealPage-OLL-Widget"]')))
还请注意,允许切换到静态
iframe
的方法是切换到.frame()
,而不是切换到.frame()
提供的HTML示例显示iframe没有@id
,因此您的代码将无法工作。如果iframe有一个@id
这一行iframe=driver.get\u element\u by\u id('iframe')
是绝对冗余的,因为您可以通过@id
和driver.switch\u切换到.frame(“iframe\u id”)
我不认为它是丰富的,因为它更详细,没有那么长的行,但它并不能完全解决问题,所以这是一个错误的答案。感谢您提供的答案,我不知道这种方式。运行代码当前返回以下错误:WebDriverException:消息:未知错误:调用函数结果缺少“值”(会话信息:chrome=66.0.3359.181)(驱动程序信息:chromedriver=2.30.477690(c53f4ad87510ee97b5c3425a14c0e79780cdf262),platform=Mac OS X 10.12.6 x86_64)
另外,编辑了问题以更正切换到
错误,谢谢。根据上面的说明,我运行的是一个过时版本的webdriver。用最新版本运行了你的代码,它成功了!谢谢你,安德森!