2016-04-14 15 views
10

Khi sử dụng proxy với phantomjs, nó sử dụng tác nhân người dùng python mặc định.Proxy + Selenium + PhantomJS không thể thay đổi User-Agent

Chạy: Python 3.5.1 trên 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) 

Và lỗi:

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

Trong câu hỏi tương tự đã có kết luận vấn đề đó là do nhà cung cấp proxy bằng cách thiết lập user-agent tại máy chủ mức độ, tuy nhiên tôi nghi ngờ đó là trường hợp ở đây kể từ khi tôi có thể sửa đổi nó bằng cách sử dụng proxy với chrome.

Trả lời

1

Đây là những gì làm việc cho tôi:

Trong trường hợp của tôi Tôi đã xem xét kỹ hơn về khả năng của người lái xe 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) 

Kết quả là:

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

nào có nghĩa là userAgent đã được thiết lập chính xác ('phantomjs.page.settings.userAgent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 (KHTML, like Gecko) Chrome/15.0.87'), nhưng bằng cách nào đó nó không lấy proxy mà tôi thiết lập với các dịch vụ-args. Thao tác bằng tay khả năng như thế này làm việc ra khá đẹp mặc dù:

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) 

Cảm ơn cho câu hỏi này, tôi đã thực sự nhìn vào proxy với PhantomJS cho khá trong một và câu hỏi này mang lại cho tôi đi đúng hướng. Tôi hy vọng điều này sẽ hữu ích!

Các vấn đề liên quan