我有一个动态生成的iframe元素(输入类型),需要将其存储为变量。iframe看起来像:
<iframe id="iframe39993" class="green tea" src="...foo">
#document
<!doctype html>
<html>
<head>...</head>
<body style>
<div id="layout" class=container>
<div class="row">
<input class="required" type="number">
</div>
</div>
</body>
</html>
我正在使用Selenium/Web驱动程序来做到这一点:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.switch_to.frame(driver.find_element_by_class_name('green tea'))
content = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//* [@id='layout']/div[1]/input")))
print(content.text)
driver.switch_to.default_content()
driver.quit()
出于某种原因,我只得到一个换行符(空字符串)作为输出。我很确定,xpath应该是正确的,但是不能打印(或存储)iframe元素。iframe元素包含已经用户输入的数据,我需要访问这些数据。有人有什么想法吗?
您的定位器。find_element_by_class_name('绿茶')
将不起作用,因为。find_element_by_class_name()
只接受一个类名,您已经传递了两个,“绿色”和“茶”。如果您想使用这两个类来定位元素,更好的选择是CSS选择器。绿色。茶
。
另一个问题是INPUT
元素不包含文本,它们包含值。要从INPUT
中获取值,您需要使用。get_attribute('value')
而不是. text
。
根据上面的两项更新您的代码,
driver = webdriver.Chrome()
driver.switch_to.frame(driver.find_element_by_css_selector('.green.tea'))
content = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='layout']/div[1]/input")))
print(content.get_attribute('value'))
driver.switch_to.default_content()
driver.quit()
一些CSS选择器参考:
W3C
硒提示:CSS选择器
驯服高级CSS选择器
的<代码>
<input class="required" type="number">
没有任何text
或innerHTML
本身。所以代码行:
print(content.text)
将始终打印一个空字符串。
在这里你可以找到关于iframe下处理#文档的方法的相关讨论