2016-01-16 2 views
0

Je voudrais savoir comment puis-je sélectionner un menu d'option qui n'est pas dans un formulaire en utilisant Mechanize? La page que je reçois ces données, a l'option de sélection dans un div et non sur un formulaireComment choisissez-vous les choix qui ne sont pas dans un formulaire en utilisant Python?

<select name="name" onchange="someJavaScript;"> 
    <option value="-1">Value -1</option> 
    <option value="1">Value 1</option> 
    <option value="2">Value 2</option> 
</select> 

Répondre

0

Pourriez-vous nous fournir un lien vers le site Web?

Mise à jour: Vous ne savez pas si vous avez résolu le problème. Je viens de recevoir les travaux suivants pour moi, et je crois que cela devrait fonctionner pour vous aussi:

# -*- coding: utf-8 -*- 
import mechanize 

#-----------------------------------------------------------------------| 
# The following fixes error "URLError: <urlopen error [Errno 8] _ssl.c:503". 
# Include if necessary 
import ssl 
from functools import wraps 
def sslwrap(func): 
    @wraps(func) 
    def bar(*args, **kw): 
     kw['ssl_version'] = ssl.PROTOCOL_TLSv1 
     return func(*args, **kw) 
    return bar 

ssl.wrap_socket = sslwrap(ssl.wrap_socket) 
# -----------------------------------------------------------------------| 

URL = 'https://search.yahoo.com/' 
BASE_URL = 'https://search.yahoo.com/' 

# The form/controls you'd like to work on, which can be extracted from source by clicking "Inspect" on the page 
FORM_HTML = """ 
<form method="get" name="s" id="sf" role="search" action="https://search.yahoo.com/search;_ylt=AwrBTveB2p9Wj.IAEDDqFAx." accept-charset="utf-8"><label for="yschsp" class="off-left">Search query</label><div id="sbq-wrap" class="sbq-w"><input type="text" class="sbq" id="yschsp" name="p" value="" autocomplete="off" autofocus="" tabindex="1" autocorrect="off" autocapitalize="off" style="-webkit-tap-highlight-color: transparent;"><div id="yui_3_10_0_1_1453316701540_15" class="sa-sbx-container"><div id="yui_3_10_0_1_1453316701540_18" class="sa lowlight"></div></div></div><input type="submit" class="sbb" value="Search" tabindex="2"><input type="hidden" name="fr" value="sfp"><input type="hidden" name="fr2" value=""><input type="hidden" name="iscqry" id="iscqry"></form> 
""" 
br = mechanize.Browser() 
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 
br.open(URL) 

# work on the FORM_HTML 
res = mechanize._form.ParseString(FORM_HTML, BASE_URL) 

# get the HTMLForm instance 
br.form = res[1] 
form = br.form 

# ----------------------------------------------- 
# Refer to: http://stackoverflow.com/questions/13965285/use-mechanize-to-submit-form-without-control-name 
# In case the control's name is NONE: 
form.set_value('stackover', type= 'text', id='yschsp') 

# ----------------------------------------------- 
# In case the control has name 'p', use the following to set the value: 
#form['p'] = 'stackoverflow' 

# submit the form 
response = mechanize.urlopen(form.click()) 

# print the page content 
print response.read() 
+0

ne peut pas, mais voici l'image du html où la balise select est [lien] (http: //imgmak.com/image/Kvf) –

0
# I don't have the page source. Hope it helps. 
html = """<select name="name" onchange="someJavaScript;"> 
    <option value="-1">Value -1</option> 
    <option value="1">Value 1</option> 
    <option value="2">Value 2</option> 
</select>""" 

# work on the string above 
forms = mechanize.ParseString(html, 'fake') 

# there is only one form here, form is HTMLForm instance 
form = forms[0] 

control = form.controls[0] # the select 

# All values for control 'name' 
print [item.attrs['value'] for item in control.items] # ['-1','1','2'] 

# The current value for this control 
print form['name'] # ['-1'] 

# Select a choice (e.g. choice with value '2') 
form['name'] = ['2'] 

# Verify the value 
print form['name'] # ['2'] 
+0

Juste pour bien faire les choses ... Vous dites que je peux sélectionner un formulaire pour utiliser l'option de sélection même si l'option de sélection ne se trouve pas dans un formulaire de tag? –

+0

Oui, vous avez raison. Dans le cas où il n'y a aucun formulaire que vous pouvez trouver avec Mechanize, je vous suggère d'essayer d'analyser/poster les données en utilisant BeautifulSoup & demandes. Parce que mécaniser ne regarde que les champs de formulaire sur une page HTML statique et donc remplir/soumettre. – Quinn