python + selenium + Js 處理輪動條

來源:互聯網
上載者:User

標籤:方式   containe   targe   手機app   ber   方法   src   開啟   htbox   

selenium並不是萬能的,有時候頁面上操作無法實現的,這時候就需要藉助JS來完成了。

常見情境:

當頁面上的元素超過一屏後,想操作螢幕下方的元素,是不能直接定位到,會報元素不可見的。

這時候需要藉助捲軸來拖動螢幕,使被操作的元素顯示在當前的螢幕上。

捲軸是無法直接用定位工具來定位的。selenium裡面也沒有直接的方法去控制捲軸,

這時候只能藉助J了,還好selenium提供了一個操作js的方法:

execute_script(),可以直接執行js的指令碼。

一、JavaScript簡介

1.JavaScript是世界上最流行的指令碼語言,因為你在電腦、手機、平板上瀏覽的所有的網頁,

以及無數基於HTML5的手機App,互動邏輯都是由JavaScript驅動的。簡單地說,

JavaScript是一種運行在瀏覽器中的解釋型的程式設計語言。

那麼問題來了,為什麼我們要學JavaScript?
2.有些特殊的操作selenium2+python無法直接完成的,JS剛好是這方面的強項,所以算是一個很

好的補充。對js不太熟悉的,可以網上找下教程,簡單瞭解些即可。

http://www.runoob.com/js/js-tutorial.html

 

二、控制捲軸高度

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是最底部。

著作權,公眾號:軟體測試部落

三、橫向捲軸
1.有時候瀏覽器頁面需要左右滾動(一般螢幕最大化後,左右滾動的情況已經很少見了)。
2.通過左邊控制橫向和縱向捲軸scrollTo(x, y)js = "window.scrollTo(100,400);"

driver.execute_script(js)

3.第一個參數x是橫向距離,第二個參數y是縱向距離

 

四、Chrome瀏覽器

1.以上方法在Firefox上是可以的,但是用Chrome瀏覽器,發現不管用。
Google瀏覽器就是這麼任性,不聽話,於是用以下方法解決Google瀏覽器捲軸的問題。

2.Chrome瀏覽器解決辦法:

js = "var q=document.body.scrollTop=0"
driver.execute_script(js)

 

五、元素聚焦
1.雖然用上面的方法可以解決拖動捲軸的位置問題,但是有時候無法確定我需要操作的元素

在什麼位置,有可能每次開啟的頁面不一樣,元素所在的位置也不一樣,怎麼辦呢?

2.這個時候我們可以先讓頁面直接跳到元素出現的位置,然後就可以操作了。同樣需要藉助JS去實現。
3.元素聚焦:

target = driver.find_element_by_xxxx()
driver.execute_script("arguments[0].scrollIntoView();", target)

 

六、擷取瀏覽器名稱:driver.name

1.為瞭解決不同瀏覽器操作方法不一樣的問題,可以寫個函數去做相容。

2.先用driver.name擷取瀏覽器名稱,然後用if語句做個判斷

七、相容性
1.相容Google和firefox/IE

?
1  

八、參考代碼如下:

# coding:utf-8from selenium import webdriverdriver = 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功能還是很強大的,它還可以處理富文本、內嵌捲軸的問題。

 

python + selenium + Js 處理輪動條

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.