pracuję z selenem i Python i próbuję zrobić dwie rzeczy:Selen Webdriver: execute_script nie można wykonać niestandardowe metody i zewnętrznych plików javascript
- importować zewnętrzny plik JavaScript i wykonać metodę zdefiniowane tam
- Definiowanie metod na sznurku i nazywają je po ocenie
jest to wyjście dla pierwszego przypadku:
test.js
function hello(){
document.body.innerHTML = "testing";
}
kod Python
>>> from selenium import webdriver
>>> f = webdriver.Firefox()
>>> f.execute_script("var s=document.createElement('script');\
... s.src='file://C:/test.js';\
... s.type = 'text/javascript';\
... document.head.appendChild(s)")
>>> f.execute_script("hello")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\selenium-2.41.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 394, in execute_script
{'script': script, 'args':converted_args})['value']
File "C:\Python27\lib\site-packages\selenium-2.41.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 166, in execute
self.error_handler.check_response(response)
File "C:\Python27\lib\site-packages\selenium-2.41.0-py2.7.egg\selenium\webdriver\remote\errorhandler.py", line 164, in check_response
raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: u'hello is not defined' ; Stacktrace:
at anonymous (about:blank:68)
at handleEvaluateEvent (about:blank:68)
I za drugim przypadku:
>>> js = "function blah(){document.body.innerHTML='testing';}"
>>> f.execute_script(js)
>>> f.execute_script("blah")
...
raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: u'blah is not defined' ; Stacktrace:
Dzięki za odpowiedź, rozumiem błąd na pierwszym przypadku, ale drugi przypadek, to nie zrobił” t działa dla mnie (przynajmniej nie daje mi więcej błędów, ale nic się nie dzieje) Gdzie możesz to zrobić? Jeśli tak, czy mógłbyś udostępnić kod ?. Dzięki! – estemendoza
Edytowałem swoją odpowiedź. – Louis
Dzięki! Zadziałało, dzwoniłem bez "()" jak ten f.execute_script ("bla") – estemendoza