一尘不染

设置MutationObserver,如何在使用Selenium页面加载之前注入javascript

selenium

我正在尝试将MutationObserver设置为在加载时观察页面突变。

为此,应在页面加载之前配置MutationObserver。

使用selenium-chromedriver,找不到为此目的注入JS的方法。

我知道chrome扩展程序可以做到这一点,但扩展程序无法在无头模式下工作。

那就是问题所在。


阅读 432

收藏
2020-06-26

共1个答案

一尘不染

通过调用DevTool API可以实现 Page.addScriptToEvaluateOnNewDocument

from selenium import webdriver
from selenium.webdriver.remote.webdriver import WebDriver
import json

def send(driver, cmd, params={}):
  resource = "/session/%s/chromium/send_command_and_get_result" % driver.session_id
  url = driver.command_executor._url + resource
  body = json.dumps({'cmd': cmd, 'params': params})
  response = driver.command_executor._request('POST', url, body)
  if response['status']:
    raise Exception(response.get('value'))
  return response.get('value')

def add_script(driver, script):
  send(driver, "Page.addScriptToEvaluateOnNewDocument", {"source": script})

WebDriver.add_script = add_script


# launch Chrome
driver = webdriver.Chrome()

# add a script which will be executed when the page starts loading
driver.add_script("""
  if (window.self === window.top) { // if main document
    console.log('add script');
  }
  """)

# load a page
driver.get("https://stackoverflow.com/questions")
2020-06-26