同步請求運行js:
driver.execute_script(script, *args)
- script:要運行的js語句
- *args:運行js語句時使用的一些參數
異步請求運行js:
driver.execute_async_script(script, *args)
- script:要運行的js語句
- *args:運行js語句時使用的一些參數
同步請求和異步請求的區別:
-
同步請求指我們發送一個請求后,需要服務端進行返回相應結果后才能進行接下來的操作;
-
異步請求指我們發送一個請求后,不需要服務端返回響應結果,直接進行接下來的操作(例如AJAX)。
from selenium import webdriver class TestExample: def test_example1(self): driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") #打開百度 js = 'document.getElementById("su").value' # None js = 'return document.getElementById("su").value' # 想拿到javaScript執行的返回值,需要在js腳本前加上return 百度一下 print(driver.execute_script(js)) driver.quit()
通過selenium所定位的元素對象,來傳遞到js語句中,作為一個js中的一個元素對象來進行操作。
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("http://www.runoob.com/js/js-tutorial.html") # 高亮顯示所定位的元素 light_element = driver.find_element_by_id("s") js_sentence_light = "arguments[0].setAttribute('style', arguments[1]);" js_sentence_args = "color: yellow; border: 5px solid yellow;" driver.execute_script(js_sentence_light, light_element, js_sentence_args) sleep(3) # 更改頁面輸入框中的默認文字 js_sentence_style = "document.getElementById('s').placeholder='我改變了搜索輸入框默認文字';" driver.execute_script(js_sentence_style) sleep(3) # 改變滾動條位置 js_sentence_position = "document.documentElement.scrollTop=999" driver.execute_script(js_sentence_position) sleep(3)