我正在使用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。只需一行文字。
答案 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>