English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

python+Ejemplo de automatización de clics después de iniciar sesión en selenium

La empresa limita el tiempo para revisar el código en codereview, en realidad, muchos códigos pertenecen a la generación automática del marco y no es necesario pasar mucho tiempo revisándolos, para alcanzar los estándares, se necesita hacer clic en áreas fijas de la página web (hacer clic con el ratón). Pienso que se puede utilizar el método de prueba automatizada para completar este trabajo físico ineficaz.

Primero, define claramente las necesidades:   

  1. Abrir automáticamente la página web   
  2. Iniciar sesión en la cuenta 
  3. Hacer clic en una área fija a intervalos regulares

Las soluciones que pienso son dos, sikuli o python+selenium. La ventaja de sikuli es que las operaciones lógicas son simples y directas, se utilizan imágenes como marcadores, la desventaja es que se necesita que la ventana esté fija y no se puede ejecutar en segundo plano. selenium es un poco más complejo, pero se ejecuta rápidamente y las ventanas pueden estar ocultas.

Aquí se registra brevemente el uso de Python+un ejemplo pequeño de selenium.

La versión de Python que utiliza3.3y selenium2,Entorno de Windows (ahora se admite3.0 o superior, muchos foros y blogs no han actualizado).

Primero, la instalación del software, no se describe Python, recuerda configurar las variables de entorno.

A continuación, instala selenium, si ya lo has instalado pip. Ejecuta el siguiente comando.

instalar pip -U selenium

Otra forma de hacerlo,https://pypi.python.org/paquetes/fuente/s/selenium/selenium-2.52.0.tar.gzDescargar e descomprimir. Aquí se describe brevemente la versión de Windows, de hecho, también es más o menos en Unix, descargar e instalar con Wget.

使用命令(setup一般用于第三方模块的安装):

cd c:\Python3\xxxx
python setup.py install

安装过程中可能会出现ImportError: No module named setuptools,这是因为缺少setuptools模块,Python默认不安装。

http://pypi.python.org/pypi/setuptools上面提供了各系统的安装包和安装指南,对于Windows系统,下载https://bootstrap.pypa.io/ez_setup.py自动化安装脚本。

运行:

python ez_setup.py

完成后再安装selenium即可。

这里用我自己的实例简单的讲解一下流程。

第一步先完成打开浏览器。

selenium2结合了selenium和webdriver,直接引入各个浏览器相应的驱动,打开即可,注意chrome驱动可能需要另行安装。

from selenium import webdriver
browser = webdriver.Firefox()
browser.get('https://www.xxx.com')

打开网页后需要登录,F12打开浏览器调试器,小箭头选取元素,查看登录框账号和密码的属性,一般都有ID。selenium可以通过以下各个方法获取元素并进行各种操作,具体解释请看上方链接文档:

  1. find_element_by_id
  2. find_element_by_name
  3. find_element_by_xpath
  4. find_element_by_link_text
  5. find_element_by_partial_link_text
  6. find_element_by_tag_name
  7. find_element_by_class_name
  8. find_element_by_css_selector

其中id最为有效方便,优先考虑。选取完元素之后可以通过WebDriver API调用模拟键盘的输入和鼠标的点击操作。代码如下:

username="qun" 
passwd="passwd"
browser = webdriver.Firefox()
browser.get('https://www.xxx.com')
browser.implicitly_wait(10)
elem=browser.find_element_by_id("loginFormUserName")
elem.send_keys(username)
elem=browser.find_element_by_id("loginFormPassword")
elem.send_keys(passwd)
elem=browser.find_element_by_id("loginFormSubmit")
elem.click()

一般登录之后页面都会跳转到新的网页上,如何获取新的网页呢?这里有个窗口句柄的概念,通过切换窗口句柄来完成。注意!有时候元素在一个frame里面的时候,也需要通过switch切换。这里出现一个wait函数(上面也有),是因为页面加载需要时间,很可能在点击之后元素才加载出来,下一节详细解释一下wait。

browser.implicitly_wait(10)
browser.switch_to_window(browser.window_handles[-1")

之后选择需要点击的区域,这里使用xpath定位,因为在自动化测试的过程中,很可能元素无法通过id,name等方法定位(不少人就是不写,爱table套table,我也没办法),xpath就有了用武之地。常用的偷懒方法是Firefox安装xpath插件,右键直接获取。这里不介绍,因为不提倡,使用插件会造成代码里充斥这样的东西:   

XPath(/html/body/div/div[3]/div[2]/div[4]/p[2")

不到万不得已,尽可能使用元素的特征来定位,比如按钮的name。

或者通过父元素定位子元素。

username =browser.find_element_by_xpath("//input[@name='username']")
clear_button = browser.find_element_by_xpath("//form[@id='loginForm']/input[4")

代码如下,网上经常出现的By的用法需要引入包。

from selenium.webdriver.common.by import By

这里使用另外一个函数,我不知道有什么区别- -。

for i in range(100):
  elem=WebDriverWait(browser, 30).until(
    lambda x:x.find_element_by_xpath("//table[@class='aaa']"/td[1))
  elem.click()
  time.sleep(20)
  print ("click",i)

Luego aquí también hay que mencionar la función wait, en selenium2La espera diferida se divide en dos tipos, espera explícita y espera implícita.  

Esperar explícitamente

La espera explícita es esperar a que aparezca un elemento o que un elemento sea clickeable, etc., si no se encuentra, seguir esperando, a menos que no se encuentre dentro del tiempo especificado, entonces salte la Exception.

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "myDynamicElement"))
  )

Esperar implícitamente

Atención, la espera implícita es informar que todos los elementos DOM deben buscar un elemento durante tanto tiempo, si no se encuentra inmediatamente, intente nuevamente.

browser.implicitly_wait(10) # segundos

La diferencia entre las dos es que una es gestionar directamente el objeto de tiempo de expiración y la otra es delegar en el webdriver.

Por supuesto, también se puede esperar pasivamente. Recuerde importar el paquete time.

time.sleep(20)

Aquí solo se muestra una demostración simple de uso, hay muchos lugares que pueden mejorarse, no hay encapsulación de funciones, no se utiliza la ejecución concurrente de múltiples subprocesos mediante multithreading. Se mejorará según sea necesario.

Esto es todo el contenido de este artículo, espero que ayude a su aprendizaje y que todos los amigos apoyen el tutorial de grito.

Declaración: El contenido de este artículo se obtiene de la red, pertenece al propietario original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente por humanos y no asume responsabilidades legales relacionadas. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @ para denunciar y proporcione evidencia. Si se verifica, este sitio eliminará inmediatamente el contenido sospechoso de infracción.)

Te gustará