lxml:元素不是此节点的子节点

Kai*_*ais 4 python lxml

我正在尝试更改以下 html 文档中标题的值:

<html lang="en">
<head>
  <meta charset="utf-8">
  <title id="title"></title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
  <app-root></app-root>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

为了完成任务,我编写了以下使用 lxml 的 python 脚本:

from lxml.html import fromstring, tostring
from lxml.html import builder as E

html = fromstring(open('./index.html').read())
html.replace(html.get_element_by_id('title'), E.TITLE('TEST'))
Run Code Online (Sandbox Code Playgroud)

但运行脚本后,出现以下错误:

ValueError:元素不是此节点的子节点。

应该是什么原因导致这个错误?谢谢。

t.m*_*dam 5

“title”标签是“head”节点的子节点。在您的代码中,您在“html”节点上使用replace,该节点没有“title”元素(不是直接),因此ValueError.

replace如果在“头”节点上 使用,您可以获得所需的结果。

html.find('head').replace(html.get_element_by_id('title'), E.TITLE('TEST'))
Run Code Online (Sandbox Code Playgroud)