2011-05-28 1 views
1

Я попытался сделать модуль механизации работать с GAE, но не повезло. Я использовал самую последнюю версию механизации и версии, которые относятся к GAE отсюда Python Mechanize + GAEpython code.Модуль механизма для GAE

Что я хочу сделать, это войти на сайт и отправить форму.

Пример кода

import mechanize 

def mech(uname,passw,txtto,msg): 
    br = mechanize.Browser() 
    br.open("http://example.com") 
    br.select_form(nr=0) 

    br["username"]= uname 
    br["password"]= passw 
    # br.form 

    response = br.submit() 
    br.select_form(nr=0) 
    # print br.form 

    br["txt"] = txtto 
    br["message"] = msg 

    br.submit() 
    br.back() 

С модулем механизировать я получаю

'str' object has no attribute 'fileno' 

и gaemechanize я получить

app.mechanize.ClientForm.ControlNotFoundError 

ControlNotFoundError: no control matching name 'txt' 

Код тестируется и работает за пределами GAE, так что это не проблема. Я использую рамки kay, если это помогает.

+0

Пожалуйста, добавьте пример кода, в противном случае это очень трудно, чтобы помочь вам. –

+0

отредактировал мое сообщение, чтобы лучше описать проблему –

+0

Какой результат из 'print br.form'? – cerberos

ответ

0

Похоже, вы пытаетесь сделать это из приложения Python GAE. Существует множество ограничений на то, что может сделать код GAE без Flex-среды (например, ограничения на обход других процессов и т. Д.), Которых нет в облачных функциях Google. Я рекомендую вам попробовать это из облачной функции Google. Пока еще нет официальной поддержки python для GCF, есть github project, который позволит вам развернуть код Python в GCF.

Мне удалось получить какой-то аналогичный код автоматизации браузера для работы в GCF с помощью удаленного модуля Node.js chromium, поэтому я бы подумал, что GCF будет работать и на вас.

Использование облачной функции также отнимает много нагрузки от вашего приложения GAE, поэтому его решение лучше всего, поскольку это действительно больше фоновая работа.

Если вы решили использовать Node.js или Python для записи своей облачной функции, то после ее настройки вы можете легко вызвать ее из триггера Pub/Sub или HTTP из вашего приложения Python GAE.

https://cloud.google.com/functions/

+0

примечание: поскольку вы упоминаете, что код работает вне GAE, я был бы уверен, что одно из ограничений стандартного кода GAE окружающей среды мешает этому работать –