switch_to select_by_value instalar example como python selenium

select_by_value - selenium python install



Cómo obtener el código de estado usando selenium.py(código de Python) (8)

No es posible.

Desafortunadamente, Selenium no proporciona esta información por diseño. Hay una discusión muy larga sobre esto, pero la más breve es que:

  1. Selenium es una herramienta de emulación de navegador, no necesariamente una herramienta de prueba.
  2. Selenium realiza muchos GET y POST durante el proceso de representación de una página y la adición de una interfaz que complicaría la API de manera que los autores se resistan.

Nos quedamos con hacks como:

  1. Busque información de error en el HTML devuelto.
  2. Utilice otra herramienta como Solicitudes (pero vea las deficiencias de ese enfoque en la respuesta de @ Zeinab).

Estoy escribiendo un script de selenio por python, pero creo que no veo ninguna información sobre:

Cómo obtener el código de estado http de Selenium Python .

O me falta algo. Si alguien encontró eso, por favor siéntase libre de publicar.



Estoy usando java aquí porque no tengo mucha experiencia en Python. Además, no sé cómo obtener solo los códigos de estado de http. Lo siguiente le dará el tráfico completo de la red, puede capturar códigos de estado desde él.

Primero inicia tu servidor como

selenium.start("captureNetworkTraffic=true");

Entonces captura tu tráfico como

String traffic = selenium.captureNetworkTraffic("xml");

Puedes obtener salida en json también.


He estado navegando por la red durante aproximadamente 3 horas y no encontré una sola manera de hacerlo con el controlador web. Nunca he trabajado directamente con selenio. La única sugerencia que surgió en mi mente es usar el módulo "solicitudes" de esta manera:

import requests from selenium import webdriver driver = webdriver.get("url") r = requests.get("url") print r.status_code

El tutorial completo sobre el uso de solicitudes está here y puede instalar el módulo usando las pip install requests comando pip install requests .

Pero hay un problema que puede no siempre suceder, pero debe enfocar la respuesta del conductor y la respuesta de la solicitud no es la misma; por lo tanto, solo obtiene el código de estado de la solicitud y si las respuestas de URL no son estables, probablemente se obtengan resultados erróneos.


Lo referiré a una pregunta que formulé anteriormente: Cómo detectar cuándo Selenium carga una página de error del navegador.

El problema es que, a menos que desee obtener una súper elegante con algo como un proxy de calamar o un navegador, entonces tiene que buscar una solución sucia como la que se muestra a continuación.

Reemplazar

driver.get( "http://google.com" )

con

def goTo( url ): if "errorPageContainer" in [ elem.get_attribute("id") for elem in driver.find_elements_by_css_selector("body > div") ]: raise Exception( "this page is an error" ) else: driver.get( url )

Puede ser creativo y obtener el código de error en función del texto que se muestra en el navegador real. Esto tendrá que ser personalizado basado en el navegador; el de arriba funciona para firefox.

La única forma en que esto se vuelve problemático es con 404 (página no encontrada), ya que muchos sitios tienen sus propias páginas de error y usted tiene que personalizarlas para cada una.


No tengo mucha experiencia con python. Tengo un ejemplo de Java más detallado aquí:

https://.com/a/39979509/5703420

La idea es habilitar el registro de rendimiento. Esto está activando "Network.enable" en chromedriver. A continuación, obtenga las entradas del registro de rendimiento y analícelas para ver el mensaje "Network.responseReceived".

from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities # enable browser logging d = DesiredCapabilities.CHROME d[''loggingPrefs''] = { ''performance'':''ALL'' } driver = webdriver.Chrome(executable_path="c://windows//chromedriver.exe", service_args=["--verbose", "--log-path=D://temp3//chromedriverxx.log"], desired_capabilities=d) driver.get(''https://api.ipify.org/?format=text'') print(driver.title) print(driver.page_source) performance_log = driver.get_log(''performance'') print (str(performance_log).strip(''[]'')) for entry in driver.get_log(''performance''): print (entry)

La salida contendrá "Network.responseReceived" para su url, otras solicitudes realizadas por la carga de la página o redireccionar las urls. Todo lo que tienes que hacer es analizar las entradas del registro.

''{"message":{"method":"Network.responseReceived","params":{"frameId":"9488.1","loaderId":"9488.1","requestId":"9488.1","response":{"connectionId":14,"connectionReused":false,"encodedDataLength":-1,"fromDiskCache":false,"fromServiceWorker":false,"headers":{"Connection":"keep-alive","Content-Length":"13","Content-Type":"text/plain","Date":"Wed, 12 Oct 2016 06:15:47 GMT","Server":"Cowboy","Via":"1.1 vegur"},"headersText":"HTTP/1.1 200 OK//r//nServer: Cowboy//r//nConnection: keep-alive//r//nContent-Type: text/plain//r//nDate: Wed, 12 Oct 2016 06:15:47 GMT//r//nContent-Length:13//r//nVia:1.1vegur//r//n//r//n","mimeType":"text/plain","protocol":"http/1.1","remoteIPAddress":"54.197.246.207","remotePort":443,"requestHeaders":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","Accept-Encoding":"gzip, deflate, sdch, br","Accept-Language":"en-GB,en-US;q=0.8,en;q=0.6","Connection":"keep-alive","Host":"api.ipify.org","Upgrade-Insecure-Requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"},"requestHeadersText":"GET /?format=text HTTP/1.1//r//nHost: api.ipify.org//r//nConnection: keep-alive//r//nUpgrade-Insecure-Requests: 1//r//nUser-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36//r//nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8//r//nAccept-Encoding: gzip, deflate, sdch, br//r//nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6//r//n//r//n","securityDetails":{"certificateId":1,"certificateValidationDetails":{"numInvalidScts":0,"numUnknownScts":0,"numValidScts":0},"cipher":"AES_128_GCM","keyExchange":"ECDHE_RSA","protocol":"TLS 1.2","signedCertificateTimestampList":[]},"securityState":"secure","status":200,"statusText":"OK","timing":{"connectEnd":320.508999997401,"connectStart":3.08100000256673,"dnsEnd":3.08100000256673,"dnsStart":0,"proxyEnd":-1,"proxyStart":-1,"pushEnd":0,"pushStart":0,"receiveHeadersEnd":465.725000001839,"requestTime":78246.775045,"sendEnd":320.995999994921,"sendStart":320.825999995577,"sslEnd":320.435000001453,"sslStart":141.675999999279,"workerReady":-1,"workerStart":-1},"url":"https://api.ipify.org/?format=text"},"timestamp":78247.242716,"type":"Document"}},"webview":"6e8a3b1d-e5aa-40fb-a695-280cbb0ee420"}''}, {''timestamp'': 1476252948094, ''level'': ''INFO'', ''message'': ''{"message":{"method":"Network.dataReceived","params":{"dataLength":13,"encodedDataLength":171,"requestId":"9488.1","timestamp":78247.243137}},"webview":"6e8a3b1d-e5aa-40fb-a695-280cbb0ee420"}''}, {''timestamp'': 1476252948094, ''level'': ''INFO'', ''message'': ''{"message":{"method":"Page.frameNavigated","params":{"frame":{"id":"9488.1","loaderId":"9488.1","mimeType":"text/plain","securityOrigin":"https://api.ipify.org","url":"https://api.ipify.org/?format=text"}}},"webview":"6e8a3b1d-e5aa-40fb-a695-280cbb0ee420"}''}, {''timestamp'': 1476252948095, ''level'': ''INFO'', ''message'': ''{"message":{"method":"Network.loadingFinished","params":{"encodedDataLength":171,"requestId":"9488.1","timestamp":78247.242066}},"webview":"6e8a3b1d-e5aa-40fb-a695-280cbb0ee420"}''}, {''timestamp'': 1476252948115, ''level'': ''INFO'', ''message'': ''{"message":{"method":"Page.loadEventFired","params":{"timestamp":78247.264169}},"webview":"6e8a3b1d-e5aa-40fb-a695-280cbb0ee420"}''}, {''timestamp'': 1476252948115, ''level'': ''INFO'', ''message'': ''{"message":{"method":"Page.frameStoppedLoading","params":{"frameId":"9488.1"}},"webview":"6e8a3b1d-e5aa-40fb-a695-280cbb0ee420"}''}, {''timestamp'': 147625298116, ''level'': ''INFO'', ''message'': ''{"message":{"method":"Page.domContentEventFired","params":{"timestamp":78247.276475}},"webview":"6e8a3b1d-e5aa-40fb-a695-280cbb0ee420"}''}, {''timestamp'': 1476252948122, ''level'': ''INFO'', ''message'': ''{"message":{"method":"Network.requestWillBeSent","params":{"documentURL":"https://api.ipify.org/?format=text","frameId":"9488.1","initiator":{"type":"other"},"loaderId":"9488.1","request":{"headers":{"Referer":"https://api.ipify.org/?format=text","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"},"initialPriority":"High","method":"GET","mixedContentType":"none","url":"https://api.ipify.org/favicon.ico"},"requestId":"9488.2","timestamp":78247.280131,"type":"Other","wallTime":1476252948.11805}},"webview":"6e8a3b1d-e5aa-40fb-a695-280cbb0ee420"}''}

y obtener "estado": 200 de la respuesta json. También puede analizar la respuesta "encabezados".


Parece que es posible obtener un código de estado de respuesta del registro a través de la API.

from selenium import webdriver import json browser = webdriver.PhantomJS() browser.get(''http://www.google.fr'') har = json.loads(browser.get_log(''har'')[0][''message'']) har[''log''][''entries''][0][''response''][''status''] har[''log''][''entries''][0][''response''][''statusText'']


También puede inspeccionar el último mensaje en el registro para ver un código de estado de error: print browser.get_log(''browser'')[-1][''message'']