¿Cómo navegar por todo un sitio web utilizando selenium?

¿Es posible pasar por todos los URI de una URL determinada (sitio web) utilizando selenium ?

Mi objective es lanzar el navegador Firefox usando Selenium con una URL determinada de mi elección (sé cómo hacerlo gracias a este sitio web), y luego dejar que Firefox navegue por todas las páginas que tiene la URL (sitio web). Aprecio cualquier sugerencia / ayuda sobre cómo hacerlo en Python.

Puede usar un método recursivo en una clase como la que se muestra a continuación para hacer esto.

public class RecursiveLinkTest { //list to save visited links static List linkAlreadyVisited = new ArrayList(); WebDriver driver; public RecursiveLinkTest(WebDriver driver) { this.driver = driver; } public void linkTest() { // loop over all the a elements in the page for(WebElement link : driver.findElements(By.tagName("a")) { // Check if link is displayed and not previously visited if (link.isDisplayed() && !linkAlreadyVisited.contains(link.getText())) { // add link to list of links already visited linkAlreadyVisited.add(link.getText()); System.out.println(link.getText()); // click on the link. This opens a new page link.click(); // call recursiveLinkTest on the new page new RecursiveLinkTest(driver).linkTest(); } } driver.navigate().back(); } public static void main(String[] args) throws InterruptedException { WebDriver driver = new FirefoxDriver(); driver.get("http://newtours.demoaut.com/"); // start recursive linkText new RecursiveLinkTest(driver).linkTest(); } } 

Espero que esto te ayude.

Sin embargo, como lo menciona Khyati, es posible que el selenium no sea un webcrawler o un robot. Tienes que saber dónde / qué estás tratando de probar.

Si realmente desea seguir ese camino, le recomendaría que golpee la página, retire todos los elementos y luego haga un bucle para hacer clic en cualquier elemento que corresponda a la funcionalidad de navegación (es decir, “// a” o clic en el hipervínculo).

Aunque si recorres este camino y hay una página que abre otra página y luego tiene un enlace, querrás mantener una lista de todas las URL visitadas y asegurarte de no duplicar una página como esa.

Esto funcionaría, pero también requeriría un poco de lógica para que esto ocurra … y es posible que te encuentres en un bucle sin fin si no tienes cuidado.

Selenium API proporciona todas las funciones mediante las cuales puede realizar varias operaciones como tipo, clic, ir, navegar, cambiar entre cuadros, arrastrar y soltar, etc. Lo que pretende hacer es simplemente navegar en términos sencillos, hacer clic y proporcionar diferentes direcciones. Dentro del sitio web también, si entendí correctamente. Ya, definitivamente puedes hacerlo a través de Selenium webdriver. Y puede hacer un archivo de propiedades, para una mayor facilidad y facilidad donde pueda pasar diferentes propiedades como URL, URI base, etc. y realizar las pruebas de automatización a través de Selenium Webdriver en diferentes navegadores.

Esto es posible. He implementado esto utilizando un controlador web de Java y URI. Esto fue creado principalmente para identificar los enlaces rotos.

El uso de “getElements” con etiqueta se puede obtener usando webdriver una vez abierto y guarde el valor “href”.

Verifique todo el estado del enlace usando la clase URL de java y póngalo en la stack.

Luego haga clic en el enlace de la stack y el enlace “obtener” usando Webdriver. Una vez más, obtenga todos los enlaces de la página para eliminar los enlaces duplicados que están presentes en la stack.

Repetir esto hasta que la stack esté vacía.

Puede actualizarlo según sus necesidades. Tales como niveles de desplazamiento, excluyendo otros enlaces que no tienen dominio del sitio web dado, etc.

Por favor comente si está encontrando dificultades en la implementación.

Sé que pediste un ejemplo de python, pero estaba en el medio de configurar una simple repo para las pruebas de transportadores y la tarea que quieres realizar parece ser muy fácil de hacer con el transportador (que es solo un envoltorio alrededor de webdriver )

Aquí está el código en javascript:

 describe( 'stackoverflow scrapping', function () { var ptor = protractor.getInstance(); beforeEach(function () { browser.ignoreSynchronization = true; } ); afterEach(function () { } ); it( 'should find the number of links in a given url', function () { browser.get( 'http://stackoverflow.com/questions/24257802/how-to-browse-a-whole-website-using-selenium' ); var script = function () { var cb = arguments[ 0 ]; var nodes = document.querySelectorAll( 'a' ); nodes = [].slice.call( nodes ).map(function ( a ) { return a.href; } ); cb( nodes ); }; ptor.executeAsyncScript( script ).then(function ( res ) { var visit = function ( url ) { console.log( 'visiting url', url ); browser.get( url ); return ptor.sleep( 1000 ); }; var doVisit = function () { var url = res.pop(); if ( url ) { visit( url ).then( doVisit ); } else { console.log( 'done visiting pages' ); } }; doVisit(); } ); } ); } ); 

Puedes clonar el repository desde aquí.

Nota: Sé que el transportador probablemente no es la mejor herramienta para él, pero fue tan simple hacerlo con él que simplemente lo probé.

Probé esto con Firefox (puedes usar la twig de Firefox-Conf para ello, pero será necesario que actives el controlador de web manualmente) y Chrome. Si está usando osx, esto debería funcionar sin problemas (suponiendo que tiene nodejs instalado)