Наличие ошибок при выполнении скрипта Python через кнопку HTML - PullRequest
0 голосов
/ 27 апреля 2018

Я занимаюсь созданием веб-приложения, которое использует инфраструктуру webapp2 и размещено на Google App Engine. Поэтому для запуска веб-приложения на LOCALHOST я использую следующую команду.

dev_appserver.py app.yaml

Сценарий python, который я пытаюсь запустить, находится в той же папке проекта, когда он выполняется, я получаю следующую ошибку.

 File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\remote_api\remote_api_stub.py", line 256, in _MakeRealSyncCall
    raise pickle.loads(response_pb.exception())
RuntimeError: NotImplementedError()

Понятия не имею, почему он показывает эту ошибку. Я попытался посмотреть на документацию по Python.

исключение NotImplementedError:

Это исключение происходит от RuntimeError. В определяемых пользователем базовых классах абстрактные методы должны вызывать это исключение, когда им требуется, чтобы производные классы переопределяли метод, или когда класс разрабатывается, чтобы указать, что реальная реализация все еще должна быть добавлена.

https://docs.python.org/3/library/exceptions.html#NotImplementedError

Будучи новичком в программировании, к сожалению, для меня это не имеет смысла.

Возможно, я получаю эту ошибку из-за:

1.Приложение работает на другом сервере, и я пытаюсь запустить скрипт на моем ПК. Но у загруженной демонстрации также есть некоторые скрипты на python, которые выполняются нажатием кнопки на html-странице, и они работают нормально.

  1. Сценарий, который я пытаюсь выполнить, использует веб-драйвер селена, он может конфликтовать с каркасом webapp2.

Я не уверен, почему это происходит. Любые предложения, пожалуйста. Спасибо!

UPDATE

полный возврат

Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\api_server.py", line 375, in _handle_POST
    api_response = _execute_request(request).Encode()
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\api_server.py", line 231, in _execute_request
    make_request()
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\api_server.py", line 226, in make_request
    request_id)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_stub.py", line 151, in MakeSyncCall
    method(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\remote_socket\_remote_socket_stub.py", line 234, in _Dynamic_Listen
    raise NotImplementedError()
NotImplementedError

Views.py

from handlers.api_handler import APIHandler
from handlers.ndb_handler import InitUser
import webapp2
import os
from google.appengine.ext.webapp import template



class Google_Login(webapp2.RequestHandler):
    def post(self):
        template_values = {
            'back_msg': 'View Campaigns'
        }
        try:
            app_user = InitUser()

            handler = APIHandler(app_user.client_id,
                                 app_user.client_secret,
                                 app_user.refresh_token,
                                 app_user.adwords_manager_cid,
                                 app_user.developer_token)

            handler.google_log()

            self.redirect('/showCampaigns?clientCustomerId=%s''{{ccid}}')
        except Exception as e:
           template_values['error'] = str(e)
           # Use template to write output to the page.
           path = os.path.join(os.path.dirname(__file__),
                               '../templates/base_template.html')
           self.response.out.write(template.render(path, template_values))

Api_handler.py (где используется веб-драйвер селена)

def google_log(self):  
          browser=webdriver.Firefox(executable_path=r'C:\Users\JASPREET\geckodriver.exe')
          browser.maximize_window()
          browser.get("https://accounts.google.com/ServiceLogin/identifier?continue=https%3A%2F%2Fadwords.google.com%2Fum%2Fidentity%3Fhl%3Den%26sourceid%3Dawo%26subid%3Dca-en-ha-g-aw-c-dr_df_1-b_ex!o2~-1340701349-261603328952-kwd-1329939046%26utm_campaign%3Dca-ww-di-g-aw-a-awhp_1!o2&hl=en&service=adwords&skipvpage=true&ltmpl=signin&flowName=GlifWebSignIn&flowEntry=AddSession")
          username=browser.find_element_by_css_selector('#identifierId')
          username.send_keys('#EMAIL')
          next=browser.find_element_by_css_selector('#identifierNext').click()
          time.sleep(1)
          password= browser.find_element_by_xpath("//input[@name='password']")
          password.send_keys('#PASSWORD')
          login=browser.find_element_by_xpath('//*[@id="passwordNext"]')
          login.click()
          time.sleep(3)

          browser.get('path to scripts')

          time.sleep(7)

          run=browser.find_element_by_xpath('/html/body/div[2]/root/div/div[1]/div[3]/awsm-child-content/div[2]/div/bulk-root/base-root/div[2]/div[1]/view-loader/script-editor-view/script-editor/div/buttonbar/pending-panel/div/div/material-button[2]').click()
          time.sleep(2)
          run_two=browser.find_element_by_xpath('/html/body/div[4]/div[2]/material-dialog/focus-trap/div[2]/div/footer/div/material-button[2]').click()

ФАЙЛ HTML, где я вызываю скрипт python для выполнения"FB" - это имя представления, которое ссылается на обработчик API и вызывает скрипт.

<div class="">
    <form action="/fb?clientCustomerId = {{ccid}}" method="post">
      <input type="submit" name="" value="RUN">

    </form>
  </div>

ОБНОВЛЕНИЕ 2

app.yaml

runtime: python27
api_version: 1
threadsafe: false

handlers:
- url: /stylesheets
  static_dir: stylesheets
- url: /js
  static_dir: js
- url: /.*
  script: demo.main.app
  login: required
  secure: always

libraries:
- name: ssl
  version: latest

MAIN.PY

"""App Engine application module.

Configures the web application that will display the AdWords UI.
"""


from demo import DEBUG
from views import AddAdGroup
from views import AddCampaign
from views import InitView
from views import ShowAccounts
from views import ShowAdGroups
from views import ShowBudget
from views import ShowCampaigns
from views import ShowCredentials
from views import UpdateBudget
from views import UpdateCredentials
from views import ShowPage
from views import ShowKeywords
from views import NonServing
from views import Google_Login

import webapp2


app = webapp2.WSGIApplication([('/', InitView),
                               ('/showCredentials', ShowCredentials),
                               ('/updateCredentials', UpdateCredentials),
                               ('/showAccounts', ShowAccounts),
                               ('/showCampaigns', ShowCampaigns),
                               ('/addCampaign', AddCampaign),
                               ('/showAdGroups', ShowAdGroups),
                               ('/addAdGroup', AddAdGroup),
                               ('/showBudget', ShowBudget),
                               ('/updateBudget', UpdateBudget),
                               ('/nonservingpause', NonServing),
                               ('/keywords', ShowKeywords),
                               ('/fb', Google_Login),
                               ],
                              debug=DEBUG)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...