侧边栏壁纸
博主头像
fynn博主等级

我们应该有恒心,尤其是要有自信心,必须相信自己是有能力的,而且要不惜任何代价把这种能力发挥出来。

  • 累计撰写 50 篇文章
  • 累计创建 21 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

selenium获取插件内容 shadow-root获取内容

fynn
2022-11-02 / 0 评论 / 0 点赞 / 5,909 阅读 / 387 字 / 正在检测是否收录...

想要抓取的元素,搜索不到

Shadow DOM API 的 ShadowRoot 接口是一个 DOM 子树的根节点, 它与文档的主 DOM 树分开渲染。 了解shadow-root

  • 定义函数
def expand_shadow_element(element):
    shadowRoot = chrome.execute_script('return arguments[0].shadowRoot', element)
    return shadowRoot
  • 上面是执行js代码返回shadow-root的函数
# 在打开的HTML页面中shadow-root父子级关系:
# extensions-manager -> extensions-item-list#items-list -> extensions-item 最后才是我想要的元素
# 进入第一层shadow-root
manager = expand_shadow_element(chrome.find_element_by_tag_name("extensions-manager"))
# 获取第一层中在id:items-list下有一个shadow-root
shadowRoot = expand_shadow_element(manager.find_element_by_id("items-list")) 
# 返回的shadow-root中已经有我想要的元素了
extensions_id = shadowRoot.find_element_by_tag_name("extensions-item").get_attribute("id")  
print(extensions_id)
  • 如果你的要得元素子级还有shadow-root,需要在执行一次js代码并返回DOM下的标签元素
  • 例如:extensions-manager -> extensions-item-list#items-list -> extensions-item -> div#extension-id
extensions_manager = expand_shadow_element(chrome.find_element_by_tag_name("extensions-manager"))
# 获取第一层中在id:items-list下有一个shadow-root
extensions_item_list = expand_shadow_element(extensions_manager.find_element_by_id("items-list")) 
# 返回的shadow-root中已经有我想要的元素了
extensions_item =  expand_shadow_element(extensions_item_list.find_element_by_tag_name("extensions-item")) 
print(extensions_item.find_element_by_xpath("//div[@id='extension-id']").text)
expand_shadow_element函数提交的参数中,选择器不固定,按照自己方便使用的即可
0

评论区