2016-04-14 8 views
10

Bei Verwendung von Proxy mit Phantomjs wird der Standard-Python-User-Agent verwendet.Proxy + Selenium + PhantomJS kann User-Agent nicht ändern

Running: Python 3.5.1 auf Ubuntu 14,04

service_args = [] 

if self.proxy: 
    service_args.extend([ 
     '--proxy={}:{}'.format(self.proxy.host, self.proxy.port), 
     '--proxy-type={}'.format(self.proxy.proto), 
    ]) 

    if self.proxy.username and self.proxy.password: 
     service_args.append(
      '--proxy-auth={}:{}'.format(self.proxy.username, self.proxy.password) 
     ) 

dcap = dict(DesiredCapabilities.PHANTOMJS) 
dcap["phantomjs.page.settings.userAgent"] = (
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 " 
    "(KHTML, like Gecko) Chrome/15.0.87" 
) 

self.webdriver = webdriver.PhantomJS(service_args=service_args, desired_capabilities=dcap) 

Und Fehlern:

Message: Error Message => 'Unable to find element with css selector '#navcnt td.cur'' caused by Request => {"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"105","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:39281","User-Agent":"Python-urllib/3.5"}...

In ähnlicher Frage war Schluss, dass Problem durch Proxy-Anbieter, indem User-Agenten auf dem Server verursacht wurde Level, aber ich bezweifle, dass das hier der Fall ist, da ich es mit Proxy mit Chrom ändern kann.

Antwort

1

Dies ist, was für mich gearbeitet:

In meinem Fall habe ich bei den Fähigkeiten des PhantomJS Fahrer einen genaueren Blick nahm:

dcap = dict(DesiredCapabilities.PHANTOMJS) 
dcap["phantomjs.page.settings.userAgent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 (KHTML, like Gecko) Chrome/15.0.87" 

service_args = [ 
    '--proxy=5.135.176.41:3123', 
    '--proxy-type=http', 
] 
phantom = webdriver.PhantomJS(js_path, desired_capabilities=dcap, service_args =service_args) 
print(phantom.capabilities) 

Der Ausgang war:

{'databaseEnabled': False, 'handlesAlerts': False, 'rotatable': False, 'browserConnectionEnabled': False, 'browserName': 'phantomjs', 'takesScreenshot': True, 'nativeEvents': True, 'locationContextEnabled': False, 'phantomjs.page.settings.userAgent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 (KHTML, like Gecko) Chrome/15.0.87', 'platform': 'linux-unknown-64bit', 'version': '2.1.1', 'applicationCacheEnabled': False, 'driverName': 'ghostdriver', 'webStorageEnabled': False, 'javascriptEnabled': True, 'cssSelectorsEnabled': True, 'proxy': {'proxyType': 'direct'}, 'acceptSslCerts': False, 'driverVersion': '1.2.0'} 

Welche bedeutet, dass der userAgent tatsächlich korrekt eingestellt wurde ('phantomjs.page.settings.userAgent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 (KHTML, like Gecko) Chrome/15.0.87'), aber irgendwie hat er den Proxy, den ich mit den Service-Argumenten gesetzt habe, nicht genommen. die Fähigkeiten Manipulieren funktionierte wie folgt manuell ganz nett, obwohl aus:

dcap = dict(DesiredCapabilities.PHANTOMJS) 
dcap["phantomjs.page.settings.userAgent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 (KHTML, like Gecko) Chrome/15.0.87" 

phantom = webdriver.PhantomJS(js_path, desired_capabilities=dcap) 

phantom.capabilities["acceptSslCerts"] = True 
phantom.capabilities["proxy"] = {"proxy": "5.135.176.41:3123", 
           "proxy-type": "http"} 
max_wait = 20 

phantom.set_window_size(1024, 768) 
phantom.set_page_load_timeout(max_wait) 
phantom.set_script_timeout(max_wait) 
phantom.get(url) 

Vielen Dank für diese Frage, ich war auf der Suche tatsächlich in Proxies mit PhantomJS für eine ganze Weile und diese Frage brachte mich auf dem richtigen Weg. Ich hoffe, das hilft!

Verwandte Themen