to set MutationObserver, How to inject javascript before page-loading using Selenium

后端 未结 1 1924
臣服心动
臣服心动 2020-12-29 00:11

I\'m trying to set MutationObserver for observing page mutation while loading.

In order to do that, MutationObserver should be configured before page loading.

<
相关标签:
1条回答
  • 2020-12-29 00:39

    It's possible via the DevTool API by calling 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")
    
    0 讨论(0)
提交回复
热议问题