Как выполнить модуль JavaScript с помощью веб-драйвера selenium в Python? - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь выполнить сценарий VanillaJs, используя команду execute_script в python selenium, однако проблема в том, что веб-драйвер распознает его как чистый сценарий, а не как модуль, как я намереваюсь.

Это для выполнения определенных команд на уже работающем веб-сайте, теперь я уже пытался использовать локальный хост, как и другие ответы, предложенные на этом форуме, но я продолжаю сталкиваться с проблемами, потому что мой локальный хост, а именно http://10.100.11.26:8080/ изначально является ресурсом http , а действующий веб-сайт - https , так что это исключение из опции

, так что это фрагмент кода javascript, который яя пытаюсь выполнить из файла App.js

// Transcrypt'ed from Python, 2019-09-16 01:38:28
var Trade = {};
import {AssertionError, AttributeError, BaseException, DeprecationWarning, Exception, IndexError, IterableError, KeyError, NotImplementedError, RuntimeWarning, StopIteration, UserWarning, ValueError, Warning, __JsIterator__, __PyIterator__, __Terminal__, __add__, __and__, __call__, __class__, __envir__, __eq__, __floordiv__, __ge__, __get__, __getcm__, __getitem__, __getslice__, __getsm__, __gt__, __i__, __iadd__, __iand__, __idiv__, __ijsmod__, __ilshift__, __imatmul__, __imod__, __imul__, __in__, __init__, __ior__, __ipow__, __irshift__, __isub__, __ixor__, __jsUsePyNext__, __jsmod__, __k__, __kwargtrans__, __le__, __lshift__, __lt__, __matmul__, __mergefields__, __mergekwargtrans__, __mod__, __mul__, __ne__, __neg__, __nest__, __or__, __pow__, __pragma__, __proxy__, __pyUseJsNext__, __rshift__, __setitem__, __setproperty__, __setslice__, __sort__, __specialattrib__, __sub__, __super__, __t__, __terminal__, __truediv__, __withblock__, __xor__, abs, all, any, assert, bool, bytearray, bytes, callable, chr, copy, deepcopy, delattr, dict, dir, divmod, enumerate, filter, float, getattr, hasattr, input, int, isinstance, issubclass, len, list, map, max, min, object, ord, pow, print, property, py_TypeError, py_iter, py_metatype, py_next, py_reversed, py_typeof, range, repr, round, set, setattr, sorted, str, sum, tuple, zip} from './org.transcrypt.__runtime__.js';
import {ABC, abstractmethod} from './Trade.js';
import * as __module_Trade__ from './Trade.js';
__nest__ (Trade, '', __module_Trade__);

, и это то, что я сделал в Python

import os
from unipath import Path
from selenium import webdriver
from selenium.common.exceptions import WebDriverException, JavascriptException

#set the default path for the project
path = Path(os.getcwd())

#define function "create_element"
def create_element(browser):
    with open(f"{path.child()}\\__target__\\App.js") as app:
        browser.execute_script(app.read())

#define function "open_url"
def open_url(browser,url):
    browser.get(url)
    create_element(browser)

def main():

    #declare the url to the website you want to access
    url = 'https://www.example.com'

    #create an instance of the webdriver object
    browser = webdriver.Chrome(f"{path.parent}\\bin\\chromedriver.exe")

    #open the url
    try:
        open_url(browser,url)
    except JavascriptException as j:
        browser.quit()
        print("JavaScript Error :",j)
    except WebDriverException as w:
        browser.quit()
        print("WebDriver Error :",w)
    except Exception as e:
        browser.quit()
        print("Error :",e)

if __name__ == "__main__":
    main()

Однако, когда я пытаюсь запустить вышекод Я получаю это сообщение об ошибке

WebDriver Error : Message: unknown error: Runtime.evaluate threw exception: SyntaxError: Cannot use import statement outside a module
  (Session info: chrome=77.0.3865.90)

Я предполагаю, что я пытаюсь выполнить сценарий, а не модуль, используя веб-драйвер, однако я пробовал что-то вроде этого

with open(f"{path.child()}\\__target__\\App.js") as app:
        browser.execute_script(app.read(),type='module')

точно так же как хоw Я бы использовал

<script src="http://10.100.11.26:8080/App.js", type="module"><script/>

, и все же снова я получил это сообщение об ошибке

Error : execute_script() got an unexpected keyword argument 'type'

Итак, с учетом сказанного выше и более подробно остановимся на вопросе, который я первоначально задал, как мне тогда делатьзаставить веб-драйвер распознавать файл App.js как модуль, а не как скрипт? отсюда и вышеупомянутый вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...