2011-11-29 25 views
7

Estoy usando Selenium webdriver en Python para un proyecto de raspado web.Inicie sesión en un sitio web a través de la herramienta de raspado web en Python

Deseo iniciar sesión ingresando los datos de inicio de sesión y luego presiono el botón Enviar.

Puedo ingresar el nombre de usuario y la contraseña. Pero no puedo hacer clic en el botón Enviar.

El botón "enviar" es del tipo <input>.

<input type="image" src="/images/buttons/loginnow.gif" tabindex="3"> 

Aquí está el código python donde trato de hacer clic con el mouse.

submitButton=driver.find_element_by_xpath("//input[@type='image'][@src='/images/buttons/loginnow.gif']") 
driver.click(submitButton) 

me sale el siguiente error:

AttributeError: 'WebDriver' object has no attribute 'click'

Cualquier idea de cómo solucionarlo o cualquier otra solución alternativa para acceder a un sitio web en Python.

Gracias

Respuesta

4

Debe llamar a la función de clic del elemento, no del controlador.

submitButton=driver.find_element_by_xpath("//input[@type='image'][@src='/images/buttons/loginnow.gif']") 
submitButton.click() 
9

yo tuvimos la buena suerte usando mechanize. Es bastante sencillo y simple de usar.

Aquí hay una versión reducida de un guión que hice:

from BeautifulSoup import BeautifulSoup 
from tidylib import tidy_document 

import mechanize 
import cookielib 

if __name__ == '__main__': 
    browser = mechanize.Browser() 

    cookiejar = cookielib.LWPCookieJar() 
    browser.set_cookiejar(cookiejar) 

    browser.set_handle_equiv(True) 
    browser.set_handle_redirect(True) 
    browser.set_handle_referer(True) 
    browser.set_handle_robots(False) 

    browser.open('https://www.example.com/') 

    browser.select_form(name = 'loginform') 
    browser['username'] = 'foo' 
    browser['password'] = 'bar' 

    browser.submit() 

    browser.open(browser.click_link(text = 'Link text')) 

    soup = BeautifulSoup(tidy_document(browser.response().read())[0]) 

No es necesario hacer clic en la imagen, en realidad. Solo necesita completar todos los detalles del formulario y solo submit().

Además, si no va a analizar nada, simplemente deshágase de las dependencias BeautifulSoup y tidylib.

+0

voto .. Esto es realmente increíble, Como resultado, selenio también ha 'submit()' que funcionó para mí – Kiran

+0

que es incluso mejor que volver a escribir el guión: P – Blender

Cuestiones relacionadas