????????selenium并不是萬能的,頁面上有些操作無法實現時,就需要借助JS代碼來完成了。selenium提供了一個方法:execute_script(),可以執行JS腳本代碼。
????????比如:當頁面上的元素超過一屏后,想操作屏幕下方的元素,是不能直接定位到的,會報元素不可見的錯誤。這時候需要借助滾動條來拖動屏幕,使被操作的元素顯示在當前的屏幕上。而滾動條是無法直接用定位工具來進行定位的,selenium也沒有提供直接的方法去控制滾動條,這時候只能借助JS代碼來完成。
一、JavaScript簡介
????????為什么要了解JavaScript?因為有些特殊的操作是selenium+python無法直接完成的,而JavaScript剛好是這方面的強項,所以算是一個很好的補充。
????????JavaScript是一種運行在瀏覽器中的解釋型編程語言:http://www.w3school.com.cn/js/index.asp4。
二、縱向滾動條
1)滾動條回到頂部
from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get('https://xa.ganji.com/')
time.sleep(1)# 滾動條回到頂部
js = "window.scrollTo(0, 0)"
driver.execute_script(js)
2)滾動條拉到底部
from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get('https://xa.ganji.com/')
time.sleep(1)# 滾動條拉到底部
js = "window.scrollTo(0, document.body.scrollHeight)"
driver.execute_script(js)
--scrollHeight:獲取對象的滾動高度。
--scrollWidth:獲取對象的滾動寬度。
三、橫向滾動條
????????有時候瀏覽器頁面需要左右滾動(一般屏幕最大化后,左右滾動的情況就很少見了)。通過scrollTo(x, y)方法可以控制橫向和縱向滾動條,其中第一個參數x是橫向距離,第二個參數y是縱向距離。
from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get('https://xa.ganji.com/')
time.sleep(1)js = "window.scrollTo(100, 400);"
driver.execute_script(js)
四、元素聚焦
????????用上面的方法可以解決拖動滾動條的位置問題,但是有時候無法確定我需要操作的元素在什么位置,有可能每次打開的頁面不一樣,元素所在的位置也不一樣,怎么辦呢?
????????這個時候我們可以先讓頁面直接跳到元素出現的位置,然后就可以進行操作了,同樣需要借助JS代碼來實現。
from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get('https://xa.ganji.com/')
time.sleep(1)# 元素聚焦
target = driver.find_element('xpath', '//*[@id="app"]/div/div[2]/div[3]/div[1]')
driver.execute_script("arguments[0].scrollIntoView();", target)