由于webdriver spec
的定义,Selenium WebDriver 只会与可见元素交互,所以获取隐藏元素的文本总是会返回空字符串。
可是,在某些情况下,我们需要获取隐藏元素的文本。这些内容可以使用element.attribute('attributeName')
, 通过textContent
, innerText
, innerHTML
等属性获取。
innerHTML
会返回元素的内部 HTML, 包含所有的HTML标签。
例如,<div>Hello <p>World!</p></div>
的innerHTML
会得到Hello <p>World!</p>
textContent
和innerText
只会得到文本内容,而不会包含 HTML 标签。textContent
是 W3C 兼容的文字内容属性,但是 IE 不支持innerText
不是 W3C DOM 的指定内容,FireFox不支持
-
from selenium import webdriver from selenium.webdriver.firefox.options import Options options = Options() options.add_argument('-headless') options.add_argument('--disable-gpu') # 禁用GPU加速 options.set_preference('permissions.default.image', 2) # 禁止加载图片 options.add_argument('--window-size=1280,800') # 设置窗口大小 # options.set_preference('network.proxy.type', 1) # 设置代理服务器 # options.set_preference('network.proxy.http', '120.27.224.41') # IP为你的代理服务器地址:如‘127.0.0.0’,字符串类型 # options.set_preference('network.proxy.http_port', 16818) # PORT为代理服务器端口号:如,9999,整数类型 # 配了环境变量第一个参数就可以省了,不然传绝对路径 browser = webdriver.Firefox(executable_path='/usr/local/bin/geckodriver', firefox_options=options) DEMO_PAGE = '''data:text/html, <p>Demo page for how to get text from hidden elements using Selenium WebDriver.</p> <div id='demo-div'>Demo div <p style='display:none'>with a hidden paragraph inside.</p><hr /><br /></div>''' browser.get(DEMO_PAGE) demo_div = browser.find_element_by_id("demo-div") #print (demo_div.get_attribute('innerHTML')) #print (driver.execute_script("return arguments[0].innerHTML", demo_div)) print (demo_div.get_attribute('textContent')) print (browser.execute_script("return arguments[0].textContent", demo_div))
输出:
Demo div <p style="display:none">with a hidden paragraph inside.</p><hr><br> Demo div <p style="display:none">with a hidden paragraph inside.</p><hr><br> Demo div with a hidden paragraph inside. Demo div with a hidden paragraph inside.