Skip to content

在主世界执行 JavaScript

读取 DOM —— 隔离世界(Isolated World)

Section titled “读取 DOM —— 隔离世界(Isolated World)”

默认情况下,所有 JavaScript 执行都运行在一个隔离作用域中,对页面本身不可见。

这使得页面无法检测到 JavaScript 对 DOM 的读取操作:

>>> page.goto("https://example.com/")
>>> page.evaluate("document.querySelector('h1').innerText")
'Example Domain'

然而,你的 JavaScript 无法 修改 DOM:

>>> page.evaluate("document.querySelector('h1').remove()")
# 不会生效!

修改 DOM —— 主世界(Main World)

Section titled “修改 DOM —— 主世界(Main World)”

要能够修改 DOM,需要在 主世界(main world) 中运行 JavaScript——即非隔离作用域。

泄露警告

所有在主世界中执行的代码都可能被目标网站检测到。只有在绝对必要时,才应在主世界中执行 JavaScript。

要启用主世界执行,请将 main_world_eval 参数设置为 True

with Camoufox(main_world_eval=True) as browser:
page = browser.new_page()
page.goto("https://example.com/")

现在,你可以通过在代码前添加 mw: 前缀,在主世界中注入 JavaScript:

>>> page.evaluate("mw:document.querySelector('h1').remove()")
# h1 现已被移除!

你还可以从主世界返回可 JSON 序列化的数据:

>>> page.evaluate("mw:{key: 'value'}")
{'key': 'value'}
-
0:000:00