unittest remote instalar examples con como python selenium proxy selenium-webdriver selenium-ide

remote - Ejecutando Selenium Webdriver con un proxy en Python



selenium webdriver python windows (7)

Estoy intentando ejecutar una secuencia de comandos de Selinium Webdriver en Python para realizar algunas tareas básicas. Puedo hacer que el robot funcione perfectamente cuando lo ejecuto a través de la interfaz IDE de Selenium (es decir, cuando simplemente obtengo que la GUI repita mis acciones). Sin embargo, cuando exporto el código como un script de Python e intento ejecutarlo desde la línea de comandos, el navegador Firefox se abrirá pero nunca podrá acceder a la URL inicial (se devuelve un error a la línea de comando y el programa se detiene). Esto me está sucediendo independientemente de qué sitio web, etc., estoy intentando acceder.

He incluido un código muy básico aquí para fines de demostración. No creo haber incluido correctamente la sección de proxy del código, ya que el proxy parece haber generado el error.

Cualquier ayuda sería muy apreciada.

El código siguiente simplemente tiene como objetivo abrir www.google.ie y buscar la palabra "selenio". Para mí, abre un navegador Firefox en blanco y se detiene.

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException import unittest, time, re from selenium.webdriver.common.proxy import * class Testrobot2(unittest.TestCase): def setUp(self): myProxy = "http://149.215.113.110:70" proxy = Proxy({ ''proxyType'': ProxyType.MANUAL, ''httpProxy'': myProxy, ''ftpProxy'': myProxy, ''sslProxy'': myProxy, ''noProxy'':''''}) self.driver = webdriver.Firefox(proxy=proxy) self.driver.implicitly_wait(30) self.base_url = "https://www.google.ie/" self.verificationErrors = [] self.accept_next_alert = True def test_robot2(self): driver = self.driver driver.get(self.base_url + "/#gs_rn=17&gs_ri=psy-ab&suggest=p&cp=6&gs_id=ix&xhr=t&q=selenium&es_nrs=true&pf=p&output=search&sclient=psy-ab&oq=seleni&gs_l=&pbx=1&bav=on.2,or.r_qf.&bvm=bv.47883778,d.ZGU&fp=7c0d9024de9ac6ab&biw=592&bih=665") driver.find_element_by_id("gbqfq").clear() driver.find_element_by_id("gbqfq").send_keys("selenium") def is_element_present(self, how, what): try: self.driver.find_element(by=how, value=what) except NoSuchElementException, e: return False return True def is_alert_present(self): try: self.driver.switch_to_alert() except NoAlertPresentException, e: return False return True def close_alert_and_get_its_text(self): try: alert = self.driver.switch_to_alert() alert_text = alert.text if self.accept_next_alert: alert.accept() else: alert.dismiss() return alert_text finally: self.accept_next_alert = True def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors) if __name__ == "__main__": unittest.main()


Funciona para mí de esta manera (similar al código @Amey y @ user4642224, pero más corto):

from selenium import webdriver from selenium.webdriver.common.proxy import Proxy, ProxyType prox = Proxy() prox.proxy_type = ProxyType.MANUAL prox.http_proxy = "ip_addr:port" prox.socks_proxy = "ip_addr:port" prox.ssl_proxy = "ip_addr:port" capabilities = webdriver.DesiredCapabilities.CHROME prox.add_to_capabilities(capabilities) driver = webdriver.Chrome(desired_capabilities=capabilities)


Intenta configurar FirefoxProfile

from selenium import webdriver import time "Define Both ProxyHost and ProxyPort as String" ProxyHost = "54.84.95.51" ProxyPort = "8083" def ChangeProxy(ProxyHost ,ProxyPort): "Define Firefox Profile with you ProxyHost and ProxyPort" profile = webdriver.FirefoxProfile() profile.set_preference("network.proxy.type", 1) profile.set_preference("network.proxy.http", ProxyHost ) profile.set_preference("network.proxy.http_port", int(ProxyPort)) profile.update_preferences() return webdriver.Firefox(firefox_profile=profile) def FixProxy(): ""Reset Firefox Profile"" profile = webdriver.FirefoxProfile() profile.set_preference("network.proxy.type", 0) return webdriver.Firefox(firefox_profile=profile) driver = ChangeProxy(ProxyHost ,ProxyPort) driver.get("http://whatismyipaddress.com") time.sleep(5) driver = FixProxy() driver.get("http://whatismyipaddress.com")

Este programa se probó tanto en Windows 8 como en Mac OSX. Si está utilizando Mac OSX y no tiene selenio actualizado, puede enfrentar selenium.common.exceptions.WebDriverException . Si es así, intente de nuevo después de actualizar su selenio

pip install -U selenium


Intenta configurar el proxy sock5 también. Estaba enfrentando el mismo problema y se soluciona usando el proxy socks

def install_proxy(PROXY_HOST,PROXY_PORT): fp = webdriver.FirefoxProfile() print PROXY_PORT print PROXY_HOST fp.set_preference("network.proxy.type", 1) fp.set_preference("network.proxy.http",PROXY_HOST) fp.set_preference("network.proxy.http_port",int(PROXY_PORT)) fp.set_preference("network.proxy.https",PROXY_HOST) fp.set_preference("network.proxy.https_port",int(PROXY_PORT)) fp.set_preference("network.proxy.ssl",PROXY_HOST) fp.set_preference("network.proxy.ssl_port",int(PROXY_PORT)) fp.set_preference("network.proxy.ftp",PROXY_HOST) fp.set_preference("network.proxy.ftp_port",int(PROXY_PORT)) fp.set_preference("network.proxy.socks",PROXY_HOST) fp.set_preference("network.proxy.socks_port",int(PROXY_PORT)) fp.set_preference("general.useragent.override","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A") fp.update_preferences() return webdriver.Firefox(firefox_profile=fp)

Luego llame a install_proxy ( ip , port ) desde su programa.


Mi solución:

def my_proxy(PROXY_HOST,PROXY_PORT): fp = webdriver.FirefoxProfile() # Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5 print PROXY_PORT print PROXY_HOST fp.set_preference("network.proxy.type", 1) fp.set_preference("network.proxy.http",PROXY_HOST) fp.set_preference("network.proxy.http_port",int(PROXY_PORT)) fp.set_preference("general.useragent.override","whater_useragent") fp.update_preferences() return webdriver.Firefox(firefox_profile=fp)

Luego llame a su código:

my_proxy(PROXY_HOST,PROXY_PORT)

Tuve problemas con este código porque estaba pasando una cadena como un número de puerto:

PROXY_PORT="31280"

Esto es importante:

int("31280")

Debe pasar un número entero en lugar de una cadena o su perfil de Firefox no se establecerá en un puerto correcto y la conexión a través del proxy no funcionará.


Qué tal algo como esto

PROXY = "149.215.113.110:70" webdriver.DesiredCapabilities.FIREFOX[''proxy''] = { "httpProxy":PROXY, "ftpProxy":PROXY, "sslProxy":PROXY, "noProxy":None, "proxyType":"MANUAL", "class":"org.openqa.selenium.Proxy", "autodetect":False } # you have to use remote, otherwise you''ll have to code it yourself in python to driver = webdriver.Remote("http://localhost:4444/wd/hub", webdriver.DesiredCapabilities.FIREFOX)

Puedes leer más sobre esto here .


Si alguien está buscando una solución, así es cómo:

from selenium import webdriver PROXY = "YOUR_PROXY_ADDRESS_HERE" webdriver.DesiredCapabilities.FIREFOX[''proxy'']={ "httpProxy":PROXY, "ftpProxy":PROXY, "sslProxy":PROXY, "noProxy":None, "proxyType":"MANUAL", "autodetect":False } driver = webdriver.Firefox() driver.get(''http://www.whatsmyip.org/'')


intente ejecutar el servicio, agregue la siguiente función a su código.

def connect_tor (puerto):

socks.set_default_proxy(socks.PROXY_TYPE_SOCKS5, ''127.0.0.1'', port, True) socket.socket = socks.socksocket

def main ():

connect_tor() driver = webdriver.Firefox()