python mechanize.browser submit () связанная проблема - PullRequest
6 голосов
/ 30 марта 2010

Я делаю какой-то скрипт с модулем mechanize.browser.

одна проблема в том, что все остальное в порядке, но когда форма submit () не работает,

поэтому у меня была найдена какая-то подозрительная исходная часть.

в html-источнике я был найден, например, следующим.

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

я думаю, что loginCheck (это) создает проблему при отправке формы.

но как справиться с такого рода функцией javascript с помощью модуля механизации, поэтому я могу

успешно отправили форму и можете получить результат?

мой текущий источник скриптов - folloing.

если кто-нибудь может мне помочь .. очень ценю !!

# -*- 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()

Ответы [ 3 ]

2 голосов
/ 12 апреля 2010

mechanize вообще не поддерживает Javascript. Если вам абсолютно необходимо запустить этот Javascript, загляните в Selenium. Он предлагает привязки Python для управления реальным, работающим браузером, таким как Firefox или IE.

1 голос
/ 30 марта 2010

вам либо понадобится использовать неподдерживаемый модуль DOMForm и Spidermonkey (http://pypi.python.org/pypi/python-spidermonkey)) для обработки javascript. Или вы выясните, что делает loginCheck (), и выполните его работу перед отправкой формы в python. Если loginCheck () просто проверяет очевидную достоверность данных для входа, это должно быть довольно просто. Обратите внимание, что параметр action указанного тега формы отсутствует. Это, вероятно, дано в части javascript.

В зависимости от ваших намерений может быть проще работать только с urllib2. Вы можете предполагать статичное отображение этой веб-страницы и просто публиковать данные с помощью методов urllib2, а также получать результаты с помощью них.

1 голос
/ 30 марта 2010

onsubmit просто игнорируется механизмом, интерпретация JavaScript не выполняется.
Вам необходимо проверить, что loginCheck (); в некоторых ограниченных случаях (проверка) вы можете программно делать то, что делает javascript.

...