2011-11-29 12 views
7

Używam programu Selenium webdriver w języku Python do projektu zdrapywania stron internetowych.Zaloguj się do witryny za pomocą narzędzia do zdrapywania stron internetowych w języku Python

Chcę się zalogować po wprowadzeniu danych logowania, a następnie kliknij przycisk składania.

Jestem w stanie wprowadzić nazwę użytkownika i hasło. Ale nie mogę kliknąć przycisku "Prześlij".

Przycisk "Wyślij" ma typ <input>.

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

Tutaj jest kod Pythona, w którym próbuję kliknąć myszką.

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

pojawia się następujący błąd:

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

jakiś pomysł jak to naprawić lub innego alternatywnego rozwiązania, aby zalogować się na stronie internetowej w języku Python.

Dzięki

Odpowiedz

4

Musisz wywołać funkcję kliknięcia elementu, a nie sterownika.

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

miałem szczęście przy użyciu mechanize. Jest to bardzo proste i proste w użyciu.

Oto okrojoną wersję skryptu zrobiłem:

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]) 

Nie trzeba kliknąć na obrazek, naprawdę. Musisz tylko wypełnić wszystkie odpowiednie dane formularza i po prostu submit() to.

Ponadto, jeśli nie będziesz niczego analizować, po prostu pozbyć się zależności od BeautifulSoup i tidylib.

+0

Vow .. To jest naprawdę niesamowite, jak się okazuje, Selen ma również 'submit()', który pracował dla mnie – Kiran

+0

To nawet lepiej, że przepisywanie skryptu: P – Blender

Powiązane problemy