Механизировать модуль для GAE - PullRequest
1 голос
/ 28 мая 2011

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

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

Пример кода

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'

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

1 Ответ

0 голосов
/ 13 февраля 2018

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

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

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

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

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

...