2013-12-05 2 views
1
def align_sequences(IDs): 
    import webbrowser 
    import urllib,urllib2 
    url = 'http://www.uniprot.org/align/' 
    params = {'query':IDs} 
    data = urllib.urlencode(params) 
    request = urllib2.Request(url, data) 
    response = urllib2.urlopen(request) 
    job_url = response.geturl() 
    webbrowser.open(job_url) 
align_sequences('Q4PRD1 Q7LZ61') 

С помощью этой функции я хочу открыть 'http://www.uniprot.org/align/', запросить последовательности белков с идентификаторами Q4PRD1 и Q7LZ61 для выравнивания, а затем открыть веб-сайт в моем браузере.Любые советы по отправке запроса на сайт с Python?

Первоначально он работает нормально - запуск сценария откроет веб-сайт и покажет задание выравнивания для запуска. Тем не менее, он будет продолжать навсегда и никогда не заканчиваться, даже если я обновляю страницу. Если я вводим идентификаторы в браузере и нажимаю «align», он работает нормально, для выравнивания требуется около 8 секунд.

Я не знаком с различиями между запуском чего-либо непосредственно из браузера и его запуском с Python. У кого-нибудь из вас есть представление о том, что может пойти не так?

Спасибо :-) ~ Max

ответ

1

Я думаю, что это в JavaScript. Если вы посмотрите на HTML-код кнопки Align вы можете увидеть

onclick="UniProt.analytics('AlignmentSubmissionPage', 'click', 'Submit align'); submitAlignForm();" 

UniProt.analytics() и submitAlignForm() некоторые Javascript волшебный. Эта магия в файле js-compr.js2013_11.

Вы можете просматривать этот файл, используя http://jsbeautifier.org/, а затем сделать на python, что делать javascript.

2

Вы должны нажать кнопку align. Вы не можете сделать это с webbrowser. Один из вариантов заключается в использовании selenium:

from selenium import webdriver 

url = 'http://www.uniprot.org/align/' 
ids = 'Q4PRD1 Q7LZ61' 

driver = webdriver.Firefox() 
driver.get(url) 
q = driver.find_element_by_id('alignQuery') 
q.send_keys(ids) 
btn = driver.find_element_by_id("sequence-align-submit") 
btn.click() 
Смежные вопросы