2017-11-15 8 views
0

injizieren Ich versuche, MutationObserver für das Beobachten der Seitenmutation beim Laden zu setzen.MutationObserver zu setzen, wie Javascript vor dem Seitenladen mit Selenium

Um dies zu tun, sollte MutationObserver vor dem Laden der Seite konfiguriert werden.

Mit Selen-Chrom-Treiber, konnte nicht den Weg finden, JS für diesen Zweck zu injizieren.

Ich weiß Chrome-Erweiterung kann das tun, aber Erweiterungen funktionieren nicht im Headless-Modus.

Das ist das Problem.

+1

Eine ähnliche [Frage] (https://stackoverflow.com/questions/31354352/) Antworten 's deuten auf eine MitM Proxy für die Verwendung. – wOxxOm

Antwort

1

Es ist möglich, über die DevTool API von Page.addScriptToEvaluateOnNewDocument Aufruf

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") 
Verwandte Themen