【问题标题】:How to replace entire page after Javascript code done executing?Javascript代码执行完成后如何替换整个页面?
【发布时间】:2015-07-24 02:45:01
【问题描述】:

我正在使用 JS 脚本在页面上运行一些计算。然后我使用 selenium 从results div 中获取文本。

results = json.loads(driver.find_element_by_id("results").text)

我非常希望避免使用 selenium,而是使用 requests

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

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

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

变成适合get(...).text的纯文本字符串

{"blah":"1234", "test":"4567", ...}

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

另一种方法是使用 JS 替换整个 &lt;html&gt;...&lt;/html&gt; 块,然后自行擦除。

不确定这是否可行。

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

page = get(<url goes here>)
page.json()
...

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

硒部分使用python。

编辑 1:

这里的代码显示了页面的工作方式。

https://jsfiddle.net/pkLu7uqz/

这个想法是最终得到一个只有 JSON 字符串的页面。根本没有 HTML、CSS、JS。只有一行文字。

【问题讨论】:

    标签: javascript jquery python html selenium


    【解决方案1】:

    您可以在 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>
    

    【讨论】:

    • 我今天早些时候试过这个。如果您使用“查看页面源代码”,您仍然可以看到原始源代码。如果您使用任何获取整页文本的 selenium 方法,浏览器(在我的情况下为 chrome)实际上会返回正文中带有 results 的 HTML。我感觉到我想要的东西是不可能的。
    • 查看页面源代码会一直显示原件,据我所知无法修改。我猜重定向不是一个选项?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 2013-08-21
    相关资源
    最近更新 更多