在Selenium中使用Xpath更改innerHTML;Python会创建多个转义,从而导致SyntaxError:无效或意外的标记

2024-10-03 06:19:17 发布

您现在位置:Python中文网/ 问答频道 /正文

脚本如下:

script = "document.evaluate(\"(.//*[@aria-label='Message Body'])[2]\", document).iterateNext().innerHTML = '<b>Test</b><br/><i>html</i>'"

如您所见,我至少需要对引号或撇号中的一个进行转义。你知道吗

其他变体可能是:

script = 'document.evaluate("(.//*[@aria-label=\'Message Body\'])[2]", document).iterateNext().innerHTML = "<b>Test</b><br/><i>html</i>"'

当与driver.execute_script(script)一起使用时,文本首先得到它的\转义一次,在Selenium代码中执行之后,它又得到一次转义,导致\\\'传递给Java脚本引擎,这导致SyntaxError: Invalid or unexpected token错误。你知道吗

我试过用r'test\''但是结果是有更多的转义字符。你知道吗

有没有办法将脚本正确地传递给驱动程序?你知道吗


Tags: testbr脚本messagehtmlscriptbody变体
1条回答
网友
1楼 · 发布于 2024-10-03 06:19:17

我找到了解决办法。你知道吗

我注意到在使用%r时,如果外部字符串用“”引用,则该字符串用“”导入;如果外部字符串用“”引用,则该字符串用“”导入。你知道吗

示例:

>>> "%r" % "test"
"'test'"
>>> "%r" % 'test'
"'test'"
>>> '%r' % "test"
"'test'"
>>> '%r' % 'test'
"'test'"

所以我将需要转义的地方替换为%r(不带引号),得到以下结果:

script = "document.evaluate(%r, document).iterateNext().innerHTML = %r" % ("(.//*[@aria-label='Message Body'])[2]", "<b>Test</b><br/></i>test</i>")

女巫给出的正是预期的结果。你知道吗

我希望这能帮助有类似问题的人。你知道吗

相关问题 更多 >