Выполнение скрипта с Selenium внутри <iframe>не работает, но при работе в консоли это работает - PullRequest
0 голосов
/ 13 февраля 2019

Я автоматизирую службу с помощью Selenium, и веб-сайт, к которому мне нужно получить доступ, использует теги iframes, и мне нужно изменить значение некоторых элементов внутри этого тега.

Я использовал Edge WebDriver,но я перешел на Chrome, потому что думал, что это решит проблему, и, к сожалению, это не так, поэтому я не думаю, что это имеет какое-либо отношение к драйверу, но я предпочел бы сохранить Chrome, если это возможно.

Это строка, которая имитирует скрипт:

gc.execute_script("""document.evaluate('//*[@id="QRYSELECT_WRK_QRYSEARCHTEXT254"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.setAttribute('value','foo')""")

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

По иронии судьбы, когда я открываю консоль и пишу следующую команду (с тем же сценарием выше):

document.evaluate('//*[@id="QRYSELECT_WRK_QRYSEARCHTEXT254"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.setAttribute('value','foo')

Это работает.

Вот ответная реакция на ошибку, когда я вызываю execute_script из gc:

Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    gc.execute_script("""document.evaluate('//*[@id="QRYSELECT_WRK_QRYSEARCHTEXT254"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.setAttribute('value','CEL_ADMITIDOS')""")
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\support\event_firing_webdriver.py", line 88, in execute_script
    return self._dispatch("execute_script", (script, self._driver), "execute_script", unwrapped_args)
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\support\event_firing_webdriver.py", line 160, in _dispatch
    raise e
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\support\event_firing_webdriver.py", line 157, in _dispatch
    result = getattr(self._driver, d_call)(*d_args)
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 636, in execute_script
    'args': converted_args})['value']
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Cannot read property 'setAttribute' of null
  (Session info: chrome=71.0.3578.98)
  (Driver info: chromedriver=71.0.3578.137 (86ee722808adfe9e3c92e6e8ea746ade08423c7e),platform=Windows NT 10.0.17134 x86_64)

Итак, я думаю, что это, вероятно, связано с разрешениями ...?Но я не знаю, довольно странно получать два разных результата для одного и того же сценария, не так ли?

Спасибо!

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