python - please - Proxy+Selenium+PhantomJS no puede cambiar User-Agent
selenium phantomjs example (1)
Esto es lo que funcionó para mí:
En mi caso, eché un vistazo más de cerca a las capacidades del controlador 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)
La salida fue:
{''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''}
Lo que significa que el userAgent realmente se configuró correctamente ( ''phantomjs.page.settings.userAgent'': ''Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 (KHTML, like Gecko) Chrome/15.0.87''
), pero de alguna manera lo hizo no tomar el proxy que configuré con los service-args. Sin embargo, manipular las capacidades de forma manual como esto funcionó bastante bien:
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)
Gracias por esta pregunta, en realidad estaba buscando proxis con PhantomJS durante bastante tiempo y esta pregunta me llevó por el camino correcto. ¡Espero que esto ayude!
Cuando se usa proxy con phantomjs, se usa el usuario-agente predeterminado de python.
Running: Python 3.5.1 en 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)
Y error:
Mensaje: Mensaje de error => ''No se puede encontrar el elemento con el selector css'' #navcnt td.cur '''' causado por Request => {"headers": {"Accept": "application / json", "Accept-Encoding": " identidad "," Conexión ":" cerrar "," Contenido-Longitud ":" 105 "," Tipo de contenido ":" application / json; charset = UTF-8 "," Host ":" 127.0.0.1:39281 " , "User-Agent": "Python-urllib / 3.5" } ...
En una pregunta similar, se llegó a la conclusión de que el problema era causado por el proveedor de proxy al configurar user-agent en el servidor, sin embargo, dudo que sea el caso aquí, ya que puedo modificarlo utilizando proxy con chrome.