2017-12-25 5 views
0

Der folgende Code legt den Benutzeragenten für eine phantomJS-Instanz fest, druckt ihn aus und scrappt dann eine Website, die sie erneut ermittelt. Die Ergebnisse sind unterschiedlich. Wie kann das sein? Ich war noch nicht in der Lage, this scheinbare Lösung zu reproduzieren.Wie kommt es, dass ich zwei verschiedene Benutzeragenten gleichzeitig mit PhantomJS in Python habe?

1) Set ONE User-Agent

serviceDefaults=["--ignore-ssl-errors=yes",] 
desiredDefaults={ 
      "phantomjs.page.settings.userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
      AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"} 

2) Richten Sie Treiber und Druck User-Agent

def create_phantomJS(): 
    driver = webdriver.PhantomJS("phantomjs.exe", desired_capabilities=desiredDefaults, service_args=serviceDefaults) 
    phantom_exc_uri='/session/$sessionId/phantom/execute' 
    driver.command_executor._commands['executePhantomScript'] = ('POST', phantom_exc_uri) 
    initScript="""    
    this.onInitialized=function() { 
     var page=this; 
     if (page.navigator == page.settings.userAgent){return}; 
     page.settings.navigator = page.settings.userAgent; 
    } 
    """ 
    driver.execute('executePhantomScript',{'script': initScript, 'args': []}) 
    agent = driver.execute_script("return navigator.userAgent") 
    print "rawUa:", agent 
    return driver 

3) Scrape Webseite User-Agent zu bestimmen und drucken

def use_driver(driver, URL): 
    website = driver.get(URL) 
    html = WebDriverWait(driver, 1).until(EC.presence_of_element_located((By.ID, "rawUa"))) 
    return text 

4) Ergebnisse vergleichen

driver = create_phantomJS() 
text = use_driver(driver, URL) 
print text 

Die Ausgabe ist zwei verschiedene Benutzeragenten.

rawUa: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1 
rawUa: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 

Wie in diesem Szenario in Python den User Agent übereinstimmen?

Antwort

1

Die Verbesserung des initScrip könnte funktionieren.

initScript=""" 
this.onInitialized=function() { 
console.log("[INFO] TESTING NAVIGATOR VALUE"); 
if (navigator.userAgent == this.settings.userAgent){return}; 
navigator={"User-Agent":this.settings.userAgent}; 
}.bind(this); 
""" 

Der Navigator muss auf ein neues Objekt eingestellt sein. Der Druck direkt nach der Erstellung des Treibers führt nicht zum richtigen Testergebnis, da der Handler onInitialized nach der Seitenerstellung und vor der URL-Anforderung aufgerufen wird.

+0

funktioniert wie ein Charme, ehrlich - vielen Dank – sudonym

Verwandte Themen