6 Stimmen

python mechanize.browser submit()-bezogenes Problem

Ich mache ein Skript mit dem mechanize.browser Modul.

ein Problem ist alle andere Sache ist ok, aber wenn submit() Form, es nicht funktioniert,

Ich habe also ein verdächtiges Quellenteil gefunden.

im html-Quelltext habe ich folgendes gefunden.

<form method="post" onsubmit="return loginCheck(this)" name="FRMLOGIN"/>

Ich denke, dass loginCheck(this) beim Absenden des Formulars ein Problem darstellt.

aber wie kann ich diese Art von Javascript-Funktion mit dem Mechanize-Modul handhaben, so dass ich

das Formular erfolgreich abschicken und das Ergebnis erhalten?

Im Folgenden finden Sie meine aktuelle Skriptquelle.

Wenn mir jemand helfen kann, wäre ich sehr dankbar!

# -*- coding: cp949-*-
import sys,os
import mechanize, urllib
import cookielib
from BeautifulSoup import BeautifulSoup,BeautifulStoneSoup,Tag
import datetime, time, socket
import re,sys,os,mechanize,urllib,time

br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

# Want debugging messages?
br.set_debug_http(True)
br.set_debug_redirects(True)
br.set_debug_responses(True)

# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6')]
br.open('http://user.buddybuddy.co.kr/Login/LoginForm.asp?URL=')
html = br.response().read()
print html

br.select_form(name='FRMLOGIN')
print br.viewing_html()
br.form['ID']='zero1zero2'
br.form['PWD']='012045'
br.submit()

print br.response().read()

2voto

bikemule Punkte 306

Mechanize unterstützt überhaupt kein Javascript. Wenn Sie unbedingt Javascript ausführen müssen, sollten Sie sich Selenium ansehen. Es bietet Python-Bindungen zur Steuerung eines echten, laufenden Browsers wie Firefox oder IE.

1voto

systempuntoout Punkte 68725

onsubmit wird von Mechanize einfach ignoriert, es wird keine Javascript-Interpretation vorgenommen.
Sie müssen überprüfen, was loginCheck(); in einigen begrenzten Fällen (Validierung) können Sie programmatisch tun, was javascript tut.

1voto

alex Punkte 2444

Müssen Sie entweder ein nicht gewartetes Modul verwenden DOMForm und Spidermonkey ( http://pypi.python.org/pypi/python-spidermonkey ), um Javascript zu verarbeiten. Oder Sie finden heraus, was loginCheck() tut und führen seine Arbeit vor der Formularübermittlung in Python aus. Wenn loginCheck() nur die offensichtliche Gültigkeit der Anmeldedaten überprüft, sollte das ziemlich einfach sein. Bitte beachten Sie, dass der Aktionsparameter des angegebenen Formular-Tags fehlt. Er wird wahrscheinlich im Javascript-Teil angegeben.

Je nachdem, was Sie vorhaben, ist es vielleicht einfacher, nur mit urllib2 zu arbeiten. Sie könnten von einem statischen Erscheinungsbild der Webseite ausgehen und einfach Daten mit den Methoden von urllib2 posten und damit auch die Ergebnisse erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X