使用selenium webdriver从隐藏元素中获取文本

本文介绍如何使用Selenium WebDriver在遇到隐藏元素时获取文本内容。由于WebDriver只与可见元素交互,直接获取隐藏元素的文本通常返回空字符串。通过innerHTML和textContent属性,我们可以绕过这一限制,获取到包括或仅包括文本的内容。注意,textContent是W3C兼容的,但IE不支持,而innerText虽在Firefox中不受支持,但在其他地方可能有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于webdriver spec的定义,Selenium WebDriver 只会与可见元素交互,所以获取隐藏元素的文本总是会返回空字符串。
可是,在某些情况下,我们需要获取隐藏元素的文本。这些内容可以使用element.attribute('attributeName'), 通过textContent, innerText, innerHTML等属性获取。

  • innerHTML 会返回元素的内部 HTML, 包含所有的HTML标签。
    例如,<div>Hello <p>World!</p></div>innerHTML会得到Hello <p>World!</p>
  • textContentinnerText 只会得到文本内容,而不会包含 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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值