[英]How can I use jQuery with selenium execute_script method?
How can I use jQuery with the selenium execute_script
method, if the current page isn't already using jQuery? 如果当前页面尚未使用jQuery,如何将jQuery与selenium
execute_script
方法execute_script
使用?
For example: 例如:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get(url)
driver.execute_script('$("#id").wrap("<h1></h1>")')
I've tried adding a script like this: 我试过添加这样的脚本:
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.findElementsByTag('head')[0].appendChild(jquery_script)"
)
But I get errors saying that the jquery_script variable is undefined. 但是我收到错误消息,说jquery_script变量未定义。
It seems way better to load a local jquery: 加载本地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. 它更快,您不必担心时序问题。
You have two mistakes: 您有两个错误:
getElementsByTagName
instead of findElementsByTag
getElementsByTagName
代替findElementsByTag
""" """
or you have to put Javascript in one line. """ """
或者必须将Javascript放在一行中。 After this it adds jQuery
but it need few lines more to use $
在此之后,它添加了
jQuery
但使用$
需要几行
First: it needs some time to load jQuery
so it needs time.sleep()
第一:加载
jQuery
需要一些时间,因此需要time.sleep()
Second: this code doesn't create automatically $
and it needs $ = window.jQuery;
第二:此代码不会自动创建
$
,而是需要$ = 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
来运行将创建$
代码
jquery_script.onload = function(){var $ = window.jQuery;};
but it still need time.sleep()
before you use $
. 但是在使用
$
之前它仍然需要time.sleep()
。
I took this from Load jQuery with Javascript and use jQuery 我从Java加载jQuery并使用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()
最终,您可以在
onload
全部运行,然后就不需要时间了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);""")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.