简体   繁体   English

如何将jQuery与硒execute_script方法一起使用?

[英]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
  • you have to put it in triple """ """ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM