• selenium+python自动化104-如何获取隐藏元素text文本


    前言

    首先 selenium 是可以定位到隐藏元素的,但是 selenium 不能跟隐藏元素交互,也就是隐藏元素element不能使用element.click()方法。
    隐藏元素element.text 虽然不会报错,但获取到的文本是空值

    隐藏元素定位

    登录之后,获取个人中心的账号内容,在页面上没显示,f12能看到,很明显这是个隐藏元素style="display: none;"

    from selenium import webdriver
    import time
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    
    driver = webdriver.Chrome()
    driver.get("http://49.235.x.xx:8200/users/login/")
    time.sleep(3)
    
    # 先登录
    time.sleep(3)
    driver.find_element_by_id("username").send_keys("1234@qq.com")
    driver.find_element_by_id("password_l").send_keys("123456")
    driver.find_element_by_id("jsLoginBtn").click()
    time.sleep(2)
    
    # 隐藏元素定位
    yoyo = driver.find_element_by_css_selector(".userdetail")
    print(yoyo)
    
    # 获取文本
    print(yoyo.text)
    

    结果返回

    <selenium.webdriver.remote.webelement.WebElement (session="d705909d146a26f88883e7f8c493de9b", element="1bb6cc1f-f205-482e-a0aa-bd7b5e923a9d")>
    
    

    很明显隐藏元素能定位到,但是获取的文本值是空的(隐藏元素不能交互)

    JavaScript 获取隐藏元素文本

    selenium 的方法不能操作隐藏元素,但是 JavaScript 是可以直接操作隐藏元素的,先在浏览器上调试

    document.querySelector('.userdetail p').innerText
    

    于是可以用 selenium 执行 JavaScript 脚本来获取隐藏元素的 text

    from selenium import webdriver
    import time
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    
    driver = webdriver.Chrome()
    driver.get("http://49.235.x.xx:8200/users/login/")
    time.sleep(3)
    
    # 先登录
    time.sleep(3)
    driver.find_element_by_id("username").send_keys("1234@qq.com")
    driver.find_element_by_id("password_l").send_keys("123456")
    driver.find_element_by_id("jsLoginBtn").click()
    time.sleep(2)
    
    js = "return document.querySelector('.userdetail p').innerText"
    text = driver.execute_script(js)
    print(text) # 1234@qq.com
    

    这是通过 JavaScript 的方法获取的,其实也可以通过鼠标操作的方法,鼠标放到元素的位置上,让隐藏元素显示出来,就可以正常操作了。

    get_attribute('innerText')

    看到评论可以用get_attribute('innerText')获取元素的文本属性,试了下也是可以的

    from selenium import webdriver
    import time
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    
    driver = webdriver.Chrome()
    driver.get("http://49.235.x.x:8200/users/login/")
    time.sleep(3)
    
    # 先登录
    time.sleep(3)
    driver.find_element_by_id("username").send_keys("1234@qq.com")
    driver.find_element_by_id("password_l").send_keys("123456")
    driver.find_element_by_id("jsLoginBtn").click()
    time.sleep(2)
    
    # # 方法一
    # js = "return document.querySelector('.userdetail p').innerText"
    # text = driver.execute_script(js)
    # print(text)    # 1234@qq.com
    
    # 方法二 get_attribute('innerText')
    t = driver.find_element_by_css_selector('.userdetail p').get_attribute('innerText')
    print(t)
    

    运行结果:1234@qq.com



    视频课程点我 ->立即参与

  • 相关阅读:
    利用outlook发送邮件的代码,其实就一句话,哈哈~~
    一个或多个数据库无法访问,因而不会在数据库访问选项卡中显示
    窗口碰壁弹回的浮动广告代码
    DataFormatString格式化数据及格式化时间失效的问题
    弹出并转向代码
    常用运行命令
    post和get
    自己总结的手动生成gridview导出excel的方法
    Spring boot download file
    RESTful WebService 入门实例
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14448951.html
Copyright © 2020-2023  润新知