2010-04-15 1 views
2

У меня есть сайт, на котором я должен нажать кнопку отправки на форме. Это дает мне ссылку. Я знаю, что ссылка связана с параметром, который передается через скрытое значение. Мне было интересно, могу ли я создать скрипт python или что-то еще, что выйдет на веб-сайт, и нажмите некоторые кнопки, возвращающие ссылку, создаваемую кнопкой отправки, если да, то как я могу передать дополнительный параметр, влияющий на создание ссылки?html/javascript автоматически получает ссылку от кнопки отправки (возможно, с помощью python?)

благодарит заранее.

ответ

1

Если это ваш python, вы ищете, а затем дайте библиотеке Mechanize. Если вы просто извлекаете небольшие, но уникальные элементы HTML-документа, тогда вы можете использовать regex's с python. Чтобы более эффективно работать с документом HTML, тогда BeautifulSoup может быть более полезным, что вы можете комбинировать с mechanize/python.

Это более прямолинейно, чем может показаться на первый взгляд.

+0

Я смотрю на механизацию, но мне интересно, будет ли это работать. потому что на веб-сайте проверяется, загружена ли страница 3 jpeg (реклама). Можно ли также эмулировать механизировать? – 2010-04-15 20:40:44

+0

Если это проверка javascript, то да, вы можете использовать механизм javascript spidermonkey с механизацией: http://pypi.python.org/pypi/python-spidermonkey – NeonNinja

+0

Также есть Scrapy: http://scrapy.org/, но я не использовали его сам. – NeonNinja

1

Посмотрите на this documentation пакета urlib2. Ниже приведен код, который вы будете использовать, но в документации объясняется (очень хорошо), что происходит.

Выдержки:

import urllib 
import urllib2 

url = 'http://www.someserver.com/cgi-bin/register.cgi' 
values = {'name' : 'Michael Foord', 
      'location' : 'Northampton', 
      'language' : 'Python' } 

data = urllib.urlencode(values) 
req = urllib2.Request(url, data) 
response = urllib2.urlopen(req) 
the_page = response.read() 

Вам нужно будет использовать HTML-парсер, как BeautifulSoup получить имя параметра и значение, которое в настоящее время размещен при нажатии на кнопку.

Edit:

Да, вы могли бы использовать mechanize для этого, как хорошо. Вы бы сделать что-то вроде этого (непроверенные):

from mechanize import Browser 

br = Browser() 
br.open("http://www.example.com/") # this would be your website 
br.select_form(name="order")  # change this to the name of your form 
response = br.submit()    # submits the form, just like if you clicked the submit button 
print response.geturl()    # prints the URL you are looking for 

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

Проверьте, есть ли у вас examples/documentation для объекта ClientForm, если вам нужно больше контроля.

+0

Я использовал urllib2 раньше, но я думаю, что механизация будет скорее решением из-за javascript, который происходит на странице. исправьте меня, если я ошибаюсь ... – 2010-04-15 20:42:32

+0

будет механизировать и передавать все кокетки и тому подобное? если это так, то это идеальное решение для меня! :) – 2010-04-15 20:57:38

+0

Основная функция 'mechanize.urlopen' обрабатывает файлы cookie автоматически, но я не мог попасть в документацию для объекта Browser, чтобы убедиться, что это так. Еще одна полезная документация: http://wwwsearch.sourceforge.net/mechanize/doc.html – tgray

1

После того, как вы загрузили данные HTML с mechanize как сказал другие пользователи, то вы могли бы использовать Beautifulsoup так:

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(html_data) 
hidden_tag = soup.find('input',name='hiddenId',type='hidden') 
hidden_value = hiddenId['value'] 

тогда вы могли бы сформировать POST с urllib2 так:

import urllib 
import urllib2 
url = 'http://yoursite.com' 
values = {'yourhiddenname' : hidden_value} 
request = urllib2.Request(url, urllib.urlencode(values)) 
response = urllib2.urlopen(request) 
result = response.read() 
Смежные вопросы