How can I use jQuery with the selenium execute_script
method, if the current page isn\'t already using jQuery?
For example:
from seleniu
You have two mistakes:
getElementsByTagName
instead of findElementsByTag
""" """
or you have to put Javascript in one line. After this it adds jQuery
but it need few lines more to use $
First: it needs some time to load jQuery
so it needs time.sleep()
Second: this code doesn't create automatically $
and it needs $ = window.jQuery;
from selenium import webdriver
import time
url = 'https://stackoverflow.com/questions/57941221/how-can-i-use-jquery-with-selenium-execute-script-method'
driver = webdriver.Firefox()
driver.get(url)
driver.execute_script("""var jquery_script = document.createElement('script');
jquery_script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
document.getElementsByTagName('head')[0].appendChild(jquery_script);""")
time.sleep(0.5) # time to load jQuery library
driver.execute_script('$ = window.jQuery;')
driver.execute_script('$("h1").wrap("<i></i>")')
#driver.execute_script('$ = window.jQuery;$("h1").wrap("<i></i>")')
You can also use jquery_script.onload
in first script to run code which will create $
jquery_script.onload = function(){var $ = window.jQuery;};
but it still need time.sleep()
before you use $
.
I took this from Load jQuery with Javascript and use jQuery
from selenium import webdriver
import time
url = 'https://stackoverflow.com/questions/57941221/how-can-i-use-jquery-with-selenium-execute-script-method'
driver = webdriver.Firefox()
driver.get(url)
driver.execute_script("""var jquery_script = document.createElement('script');
jquery_script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
jquery_script.onload = function(){var $ = window.jQuery;};
document.getElementsByTagName('head')[0].appendChild(jquery_script);""")
time.sleep(0.5) # time to load jQuery library
driver.execute_script('$("h1").wrap("<i></i>")')
Eventually you can run all in onload
and then you don't need time.sleep()
jquery_script.onload = function(){var $ = window.jQuery; $("h1").wrap("<i></i>");};
Full code
from selenium import webdriver
import time
url = 'https://stackoverflow.com/questions/57941221/how-can-i-use-jquery-with-selenium-execute-script-method'
driver = webdriver.Firefox()
driver.get(url)
driver.execute_script("""var jquery_script = document.createElement('script');
jquery_script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
// jquery_script.onload = function(){var $ = window.jQuery; $("h1").wrap("<i></i>");};
jquery_script.onload = function(){
var $ = window.jQuery;
$("h1").wrap("<i></i>");
};
document.getElementsByTagName('head')[0].appendChild(jquery_script);""")
It seems way better to load a local jquery:
with open('jquery.js', errors='ignore') as f:
driver.execute_script(f.read())
title = driver.execute_script('return $("title").text()')
It's faster and you don't have to worry about timing issues.