Antes de pasar demasiado tiempo investigando esto, pensé que haría la pregunta aquí para asegurarme de que es posible lo que estoy tratando de hacer.
Contexto: Estoy tratando de ayudar a un amigo que es camionero. Utiliza un sitio web de despacho para seleccionar sus cargas. El sitio web enumera todo lo que está disponible como una lista, pero no le permite filtrar por código postal. Básicamente, tiene que desplazarse manualmente por esta gran lista en busca de entregas. Si encuentra algo en su código postal o alrededor, lo selecciona.
Pregunta: ¿Es posible desplazarse automáticamente por el sitio web, filtrar por código postal y seleccionar un elemento, si coincide?
No hay API disponibles que me permitan hacer esto mediante programación. Entonces, pensé que tal vez haya una manera de desplazarse por el sitio web usando JavaScript y seleccionar la base en un campo en particular (código postal).
¿Es esto posible? ¿Hay una mejor manera de hacer esto?
Respondiendo a la pregunta: Selenium Webdriver puede usarse para esto.
var driver = new ChromeDriver(); driver.Navigate().GoToUrl("https://en.wikipedia.org/wiki/List_of_most_visited_websites"); IJavaScriptExecutor js = driver as IJavaScriptExecutor; // scroll by element - find element by link text and store in variable "Element" WebElement Element = (WebElement)driver.FindElement(By.LinkText("United States")); js.ExecuteScript("arguments[0].scrollIntoView();", Element); System.Threading.Thread.Sleep(5000); Console.Read();Selenium webdriver permitiría a un programador acceder a la página web y raspar el contenido deseado en función de un campo. Sin embargo, algunos sitios prohíben el raspado de datos y depende del sitio o los campos específicos.
Puede desplazarse a cada elemento usando execute_script algo como esto:
driver.execute_script("arguments[0].scrollIntoView(true);", ele) donde ele es un elemento web.
simplemente puede poner la línea anterior dentro de un bucle for o un bucle while infinito y desplazarse hasta que se cumpla una condición.
Código de muestra:
j = 0 while True: ele = driver.find_elements(By.XPATH, "xpath of all row") driver.execute_script("arguments[0].scrollIntoView(true);", ele[j]) #ele[j].text #ele[j] will represent an web element, so you can retrieve text form that like above. j = j +1 if ele[j].text == "zip code": break else: continue