Я автоматизирую службу с помощью 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)
Итак, я думаю, что это, вероятно, связано с разрешениями ...?Но я не знаю, довольно странно получать два разных результата для одного и того же сценария, не так ли?
Спасибо!