2016-04-14 11 views
10

phantomjでプロキシを使用する場合、デフォルトのpython user-agentが使用されます。Proxy + Selenium + PhantomJSはUser-Agentを変更できません

実行: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) 

とエラーでのPython 3.5.1:同様の質問で

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"}...

問題は、サーバーでユーザーエージェントを設定することで、プロキシプロバイダによって引き起こされたという結論がありましたしかし、私はそれがクロムとプロキシを使用してそれを変更することができますので、ここではそれが疑わしいです。

答えて

1

これは私のために働いていたものです:私の場合は

私はPhantomJSドライバの機能を詳しく見て取った:

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) 

出力されました:

{'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'} 

userAgentが実際に正しく設定されている('phantomjs.page.settings.userAgent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 (KHTML, like Gecko) Chrome/15.0.87')ことを意味しますが、何とかservice-argsで設定したプロキシを使用しませんでした。これはかなり良い働いたようにかかわらず、手動での機能の操作:この質問のための

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) 

おかげで、私は実際には非常にしばらくの間、PhantomJSとプロキシに探していたし、この質問は、右のトラックに私をもたらしました。 私はこれが助けてくれることを願っています!