unittest tag name instalar how examples como python selenium phantomjs qwebview

python - tag - ¿Cómo se enumeran los recursos cargados con Selenium/PhantomJS?



tag name selenium (2)

Quiero cargar una página web y enumerar todos los recursos cargados (javascript / images / css) para esa página. Yo uso este código para cargar la página:

from selenium import webdriver driver = webdriver.PhantomJS() driver.get(''http://example.com'')

El código anterior funciona perfectamente y puedo hacer algunos procesamientos en la página HTML. La pregunta es, ¿cómo enumero todos los recursos cargados por esa página? Quiero algo como esto:

[''http://example.com/img/logo.png'', ''http://example.com/css/style.css'', ''http://example.com/js/jquery.js'', ''http://www.google-analytics.com/ga.js'']

También abro a otra solución, como usar el módulo PySide.QWebView . Solo quiero enumerar los recursos cargados por página.


No hay una función en webdribver que devuelva todos los recursos que tiene la página web, pero lo que podría hacer es algo como esto:

from selenium.webdriver.common.by import By images = driver.find_elements(By.TAG_NAME, "img")

y lo mismo para script y enlace.


Esta no es una solución de Selenium , pero puede funcionar muy bien con Python y PhantomJS.

La idea es hacer exactamente lo mismo que en la pestaña ''Red'' en Chrome Developper Tools. Para hacerlo, debemos escuchar cada solicitud hecha por la página web.

Parte Javascript / Phantomjs

Usando phantomjs, esto se puede hacer usando este script, utilízalo según tu conveniencia:

// getResources.js // Usage: // ./phantomjs --ssl-protocol=any --web-security=false getResources.js your_url // the ssl-protocol and web-security flags are added to dismiss SSL errors var page = require(''webpage'').create(); var system = require(''system''); var urls = Array(); // function to check if the requested resource is an image function isImg(url) { var acceptedExts = [''jpg'', ''jpeg'', ''png'']; var baseUrl = url.split(''?'')[0]; var ext = baseUrl.split(''.'').pop().toLowerCase(); if (acceptedExts.indexOf(ext) > -1) { return true; } else { return false; } } // function to check if an url has a given extension function isExt(url, ext) { var baseUrl = url.split(''?'')[0]; var fileExt = baseUrl.split(''.'').pop().toLowerCase(); if (ext == fileExt) { return true; } else { return false; } } // Listen for all requests made by the webpage, // (like the ''Network'' tab of Chrome developper tools) // and add them to an array page.onResourceRequested = function(request, networkRequest) { // If the requested url if the one of the webpage, do nothing // to allow other ressource requests if (system.args[1] == request.url) { return; } else if (isImg(request.url) || isExt(request.url, ''js'') || isExt(request.url, ''css'')) { // The url is an image, css or js file // add it to the array urls.push(request.url) // abort the request for a better response time // can be omitted for collecting asynchronous loaded files networkRequest.abort(); } }; // When all requests are made, output the array to the console page.onLoadFinished = function(status) { console.log(JSON.stringify(urls)); phantom.exit(); }; // If an error occur, dismiss it page.onResourceError = function(){ return false; } page.onError = function(){ return false; } // Open the web page page.open(system.args[1]);

Python parte

Y ahora llama al código en python con:

from subprocess import check_output import json out = check_output([''./phantomjs'', ''--ssl-protocol=any'', / ''--web-security=false'', ''getResources.js'', your_url]) data = json.loads(out)

Espero que esto ayude