[英]How to execute extension code after native page javascript finishes executing?
[英]How to replace entire page after Javascript code done executing?
我正在使用JS腳本在頁面上運行一些計算。 然后,我使用硒從results
div中抓取文本。
results = json.loads(driver.find_element_by_id("results").text)
我非常希望避免使用硒而是使用requests
:
results = json.loads(get(<url goes here>).text)
為了實現這一點,我需要以某種簡單的JSON字符串(無HTML標記)的形式用結果替換整個頁面(包括JS)。 換一種說法:
<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替換整個<html>...</html>
塊,然后擦除自身。
不確定是否可行。
是的,我可能會使用類似:
page = get(<url goes here>)
page.json()
...
我希望找到一種從結果中刪除所有內容的方法。
使用python作為硒部分。
編輯1:
這是顯示頁面工作方式的代碼。
https://jsfiddle.net/pkLu7uqz/
這個想法的最終結果是頁面只包含JSON字符串。 根本沒有HTML,CSS,JS。 僅一行文本。
您可以在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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.