簡體   English   中英

如何將jQuery與硒execute_script方法一起使用?

[英]How can I use jQuery with selenium execute_script method?

如果當前頁面尚未使用jQuery,如何將jQuery與selenium execute_script方法execute_script使用?

例如:

from selenium import webdriver
driver = webdriver.Firefox()
driver.get(url)
driver.execute_script('$("#id").wrap("<h1></h1>")')

我試過添加這樣的腳本:

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)"
)

但是我收到錯誤消息,說jquery_script變量未定義。

加載本地jquery似乎更好:

with open('jquery.js', errors='ignore') as f:
  driver.execute_script(f.read())

title = driver.execute_script('return $("title").text()')

它更快,您不必擔心時序問題。

您有兩個錯誤:

  • getElementsByTagName代替findElementsByTag
  • 您必須將其放在三元""" """或者必須將Javascript放在一行中。

在此之后,它添加了jQuery但使用$需要幾行

第一:加載jQuery需要一些時間,因此需要time.sleep()

第二:此代碼不會自動創建$ ,而是需要$ = 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>")')

您也可以在第一個腳本中使用jquery_script.onload來運行將創建$代碼

jquery_script.onload = function(){var $ = window.jQuery;};

但是在使用$之前它仍然需要time.sleep()

我從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>")')

最終,您可以在onload全部運行,然后就不需要時間了time.sleep()

jquery_script.onload = function(){var $ = window.jQuery; $("h1").wrap("<i></i>");};

完整代碼

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