Javascript代码执行完后如何替换整个页面?

时间:2015-07-23 02:25:18

标签: javascript jquery python html selenium

我正在使用JS脚本在页面上运行一些计算。然后我使用selenium从#ifndef MYLIB_WITH_SQLITE #error mylib must be built with sqlite #endif div中获取文本。

results

我非常希望避免使用硒,而是使用results = json.loads(driver.find_element_by_id("results").text) 代替:

requests

为了实现这一点,我需要以某种方式用简单的JSON字符串(没有HTML标签)的形式替换整个页面(包括JS)。换句话说:

results = json.loads(get(<url goes here>).text)

成为适合<html> <head> ... </head> <body> <div id="results">{"blah":"1234", "test":"4567", ...}</div> ... <script> ... </script> </body> </html>

的纯文本字符串
get(...).text

此字符串由页面加载后运行的JS代码修改。这意味着必须存储结果,然后用于创建没有任何HTML或JS的全新页面。原始页面完全取代了自己。

另一种方法是使用JS替换整个{"blah":"1234", "test":"4567", ...} 块,然后擦除自己。

不确定这是可能的。

是的,我可以使用类似的东西:

<html>...</html>

我希望有一种方法可以从页面中删除除结果之外的所有内容。

使用python作为selenium部分。

编辑1:

这是显示页面工作原理的代码。

https://jsfiddle.net/pkLu7uqz/

这个想法是以一个只有JSON字符串的页面结束。根本没有HTML,CSS,JS。只需一行文字。

1 个答案:

答案 0 :(得分:0)

您可以在JavaScript中使用document.write。如果您在加载页面后调用它,则所有内容都将被您编写的内容替换。

在JavaScript上运行计算,然后使用document.write编写结果。唯一的事情是你需要异步调用它,以便页面在调用时完成加载;否则它只会将文本附加到文档(在脚本之后)。

一种简单的方法是使用setTimeout

来调用它
<html>
   <head>
      ...
   </head>
   <body>
      ...
      <script>
         // run calculations here
         ...

         // get the results into a variable
         results = RESULT_OF_THE_CALCULATIONS;

         // write the variable using a setTimeout of 1 millisecond
         setTimeout('document.write(results)', 1);
      </script>
   </body>
</html>