¿Cómo insertar JavaScript en el elemento ?

Lo que tengo es:

from lxml import etree myscript = "if(0 < 1){alert(\"Hello World!\");}" html = etree.fromstring("") for element in html.findall('//script'): element.text = myscript result = etree.tostring(html) 

Lo que obtengo es:

 >>> result 'if(0 < 1){alert("Hello World!");}' 

Lo que quiero es unescaped JavaScript:

 >>> result 'if(0 < 1){alert("Hello World!");}' 

La razón por la que su enfoque falla es porque está intentando cambiar el contenido de “texto” del elemento, mientras que necesita cambiar / insertar / anexar el Elemento en sí mismo, vea esta muestra:

 In [1]: from lxml import html In [2]: myscript = "" In [3]: template = html.fromstring("") # just a quick hack to get the  

Así que sí, todavía puedes usar lxml técnicamente para insertar elemento. Y sugiero usar lxml.html sobre etree ya que html es más amigable con respecto a los elementos html.

Usted no puede lxml.etree y lxml.etree son analizadores XML, por lo que cualquier cosa que desee analizar o crear con ellos tiene que ser XML válido. Y un escape < dentro de algún texto de nodo no es un XML válido. Es HTML válido pero no XML válido.

Es por eso que en XHTML, por lo general, tenía que agregar bloques CDATA dentro de las tags , por lo que podría poner lo que fuera sin tener que preocuparse por la estructura XML válida.

Pero en su caso, solo desea producir HTML, y para eso, debe usar un analizador de HTML. Por ejemplo BeautifulSoup :

 >>> from bs4 import BeautifulSoup >>> soup = BeautifulSoup('') >>> soup.find('script').string = 'if(0 < 1){alert("Hello World!");}' >>> str(soup) ''