selenium並非萬能的,有時候頁面上操做沒法實現的,這時候就須要藉助JS來完成了。html
常見場景:java
當頁面上的元素超過一屏後,想操做屏幕下方的元素,是不能直接定位到,會報元素不可見的。python
這時候須要藉助滾動條來拖動屏幕,使被操做的元素顯示在當前的屏幕上。web
滾動條是沒法直接用定位工具來定位的。selenium裏面也沒有直接的方法去控制滾動條,chrome
這時候只能藉助J了,還好selenium提供了一個操做js的方法:編程
execute_script(),能夠直接執行js的腳本。瀏覽器
1、JavaScript簡介微信
1.JavaScript是世界上最流行的腳本語言,由於你在電腦、手機、平板上瀏覽的全部的網頁,函數
以及無數基於HTML5的手機App,交互邏輯都是由JavaScript驅動的。簡單地說,工具
JavaScript是一種運行在瀏覽器中的解釋型的編程語言。
那麼問題來了,爲何咱們要學JavaScript?
2.有些特殊的操做selenium2+python沒法直接完成的,JS恰好是這方面的強項,因此算是一個很
好的補充。對js不太熟悉的,能夠網上找下教程,簡單瞭解些便可。
http://www.runoob.com/js/js-tutorial.html
2、控制滾動條高度
1.滾動條回到頂部:
js="var q=document.getElementById(‘id‘).scrollTop=0"
driver.execute_script(js)
2.滾動條拉到底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
3.這裏能夠修改scrollTop 的值,來定位右側滾動條的位置,0是最上面,10000是最底部。
版權全部,微信公衆號:軟件測試部落
3、橫向滾動條
1.有時候瀏覽器頁面須要左右滾動(通常屏幕最大化後,左右滾動的狀況已經不多見了)。
2.經過左邊控制橫向和縱向滾動條scrollTo(x, y)js = "window.scrollTo(100,400);"
driver.execute_script(js)
3.第一個參數x是橫向距離,第二個參數y是縱向距離
4、Chrome瀏覽器
1.以上方法在Firefox上是能夠的,可是用Chrome瀏覽器,發現無論用。
谷歌瀏覽器就是這麼任性,不聽話,因而用如下方法解決谷歌瀏覽器滾動條的問題。
2.Chrome瀏覽器解決辦法:
js = "var q=document.body.scrollTop=0"
driver.execute_script(js)
5、元素聚焦
1.雖然用上面的方法能夠解決拖動滾動條的位置問題,可是有時候沒法肯定我須要操做的元素
在什麼位置,有可能每次打開的頁面不同,元素所在的位置也不同,怎麼辦呢?
2.這個時候咱們能夠先讓頁面直接跳到元素出現的位置,而後就能夠操做了。一樣須要藉助JS去實現。
3.元素聚焦:
target = driver.find_element_by_xxxx()
driver.execute_script("arguments[0].scrollIntoView();", target)
6、獲取瀏覽器名稱:driver.name
1.爲了解決不一樣瀏覽器操做方法不同的問題,能夠寫個函數去作兼容。
2.先用driver.name獲取瀏覽器名稱,而後用if語句作個判斷
7、兼容性
1.兼容谷歌和firefox/IE
1
|
|
8、參考代碼以下:
# coding:utf-8 from selenium import webdriver driver = webdriver.Firefox() driver.get("https://www.baidu.com") print driver.name # 回到頂部 def scroll_top(): if driver.name == "chrome": js = "var q=document.body.scrollTop=0" else: js = "var q=document.documentElement.scrollTop=0" return driver.execute_script(js) # 拉到底部 def scroll_foot(): if driver.name == "chrome": #chrome 使用該方式 js = "var q=document.body.scrollTop=10000" else: #其餘瀏覽器使用這種方式 js = "var q=document.documentElement.scrollTop=10000" return driver.execute_script(js) # 聚焦元素 target = driver.find_element_by_xxxx() driver.execute_script("arguments[0].scrollIntoView();", target)
JS功能仍是很強大的,它還能夠處理富文本、內嵌滾動條的問題。