Я попытался заставить модуль механизации работать с GAE, но не повезло. Я использовал последнюю версию механизации и версии, которые являются GAE конкретными здесь Python Mechanize + код GAEpython.
Я хочу сделать это, чтобы зайти на сайт и отправить форму.
Пример кода
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.
Похоже, вы пытаетесь сделать это из приложения Python GAE. Существует множество ограничений на то, что может сделать код безопасности GAE non- flex- (например, ограничения на обход других процессов и т.д.), Которые не существуют в облачных функциях Google. Я рекомендую вам попробовать это из облачной функции Google. Пока еще нет официальной поддержки python для GCF, есть github, который позволит вам развернуть код Python в GCF.
Мне удалось получить какой-то аналогичный код автоматизации браузера для работы в GCF с помощью плагина Node.js chromium remote, поэтому я бы подумал, что GCF будет работать и на вас.
Использование облачной функции также отнимает много нагрузки от вашего приложения GAE, поэтому его решение лучше всего, поскольку это действительно больше фоновая работа.
Если вы решите использовать Node.js или Python для записи своей облачной функции, после ее настройки вы можете легко вызвать ее из триггера Pub/Sub или HTTP из вашего приложения Python GAE.