【问题标题】:selenium execute_script with newlines带有换行符的 selenium execute_script
【发布时间】:2015-01-17 10:30:45
【问题描述】:

我正在使用 selenium 和 Python,我正在尝试执行一个 JS 函数,该函数接受如下字符串:

browser.execute_script("foo('someString')")

这在 someString 没有任何换行符时有效。 当有换行符时,会发生以下情况:

\n     => Parse Error
\\n    => Newline is converted to a space
\r\n   => Parse Error
\\r\\n => Both characters are converted to a space

有没有办法做到这一点?

【问题讨论】:

    标签: javascript python string selenium


    【解决方案1】:

    简单的解决方案是将\n 转换为unicode \u000a

    类似的例子

    driver.execute_script("document.getElementById('website_name').value='hello1\u000ahello2'")
    

    【讨论】:

      【解决方案2】:

      您可以将参数传递给 javascript;可以使用arguments 访问这些附加参数:

      browser.execute_script("foo(arguments[0])", 'someString')
      browser.execute_script("foo(arguments[0])", 'string with \n is also ok!\n')
      

      【讨论】:

      • 感谢您的快速回复。我不再收到解析错误,但换行符被一起删除了。所以字符串“hello\nworld”变成了“helloworld”。
      • @MinaHany,你如何确认换行符消失了?你可以试试这个:browser.execute_script("console.log(arguments[0])", 'hello\n newline')
      • @MinaHany,如果foo 将字符串写入html,您可能需要转换换行符,例如<br>:browser.execute_script("foo(arguments[0])", 'hello\n newline\n'.replace('<br>'))
      • 你是对的,问题不在于硒。从 foo() 向下有 3 个级别的函数删除了换行符。感谢您为我指明正确的方向!但是,为了解决我的问题,我需要以某种方式覆盖删除换行符的函数(我知道它的名称)。是否可以在执行 foo 函数之前在 selenium 中执行此操作?
      • @MinaHany,您能否发布一个包含函数内容的单独问题?没有看到它,我无法回答。
      猜你喜欢
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 2019-09-04
      • 2021-03-07
      • 1970-01-01
      • 2015-10-02
      • 2021-09-09
      • 1970-01-01
      相关资源
      最近更新 更多