Я пытаюсь выполнить сценарий 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 как модуль, а не как скрипт? отсюда и вышеупомянутый вопрос.