Utilizar Selenium Grid en python

Selenium Grid permite definir un conjunto de nodos sobre los que poder realizar pruebas en paralelo. Para ello debemos bajarnos selenium server y arrancar un hub:

$ java -jar selenium-server-standalone-2.53.1.jar -role hub

y tantos nodos como queramos

$ java -jar selenium-server-standalone-2.53.1.jar -role node -hub http://localhost:4444/grid/register

Desde código, para utilizar el hub que acabamos de arrancar

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

browser = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=DesiredCapabilities.CHROME)

url = "http://jamvius.github.io"
browser.maximize_window()
browser.get(url)

browser.quit()

Utilizar Browsermod-proxy con Selenium en python

Despues de probar BrowserMob en ruby, me he encontrado con algunos problemas, debido a que la conector hace un par de años que no se actualiza, por lo que he optado por probar la versión python. Este seria un ejemplo para utilizar browsermod-proxy desde selenium

from browsermobproxy import Server
from selenium import webdriver

server = Server([path_browsermob])
server.start()
proxy = server.create_proxy()
proxy.new_har("google", {'captureHeaders': True, 'captureContent': True})

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--proxy-server={0}".format(proxy.proxy))

browser = webdriver.Chrome(chrome_options = chrome_options)
browser.get("http://jamvius.github.io/")

har = proxy.har

server.stop()
browser.quit()

Utilizar Browsermod-proxy con Selenium

BrowserMob Proxy es un proxy que nos permite captura la navegación que realizamos en archivos HAR para su posterior analisis. Se integra con java, python, ruby, pero en este ejemplo, he utilizado ruby y su Ruby client para BrowserMob Proxy. Una vez instalado el BrowserMod en nuestra máquina, este seria un ejemplo sencillo de su utilización para guardar el HAR en un archivo.

require 'selenium/webdriver'
require 'browsermob/proxy'

path = "[PATH_BROWSERMOD_PROXY]"
server = BrowserMob::Proxy::Server.new(path)
server.start

proxy = server.create_proxy

proxy_conf = Selenium::WebDriver::Proxy.new(:http => proxy.selenium_proxy.http)
caps = Selenium::WebDriver::Remote::Capabilities.chrome(:proxy => proxy_conf)
driver = Selenium::WebDriver.for(:chrome, :desired_capabilities => caps)

proxy.new_har("google",{:capture_content => true, :capture_headers => true})
driver.get "http://jamvius.github.io"

har = proxy.har
har.save_to "/tmp/google.har"

proxy.close
driver.quit

Utilizar firefox con Selenium

En las últimas versiones, Firefox y Selenium estan teniendo problemas de compatibilidad, por lo que se recomienda utilizar el nuevo driver Marionette que utiliza GeckoDriver

Para ello deberemos utilizar la nueva versión 3.0 de Selenium que esta en beta.

$ gem install selenium-webdriver -v '3.0.0.beta3.1'

Y despues configurar la inicialización del driver indicando que use marionette

driver = Selenium::WebDriver.for :firefox, marionette: true

Empezando con django (I)

Resumen del tutorial oficial de django

Para crear un nuevo proyecto

$ django-admin startproject mysite

Diferentes maneras de arrancar el servidor

$ python manage.py runserver
$ python manage.py runserver 8080
$ python manage.py runserver 0.0.0.0:8000

En django, un proyecto puede estar compuesto de varias apps, y las apps puedes estar a su vez en varios proyectos. Para crear dentro de la app.

$ cd mysite
$ python manage.py startapp polls

Para crear una vista, hay que añadir al polls/views.py

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

y crear polls/urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

y añadir al archivo mysite/urls.py

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]