做自動化程序中,會發現有的按鈕點擊不了,或者點擊沒有反應,也沒有報錯,或者不能處理滾動條等場景,我們可以通過JavaScript定位來解決這些問題,
以下總結了5種JavaScript定位的方法,除了id是定位到單個element元素物件,其它的都是elements回傳的是list物件,
1.通過id獲取
document.getElementById(“id”)
2.通過name獲取
document.getElementsByName(“Name”)
3.通過標簽名選取元素
document.getElementsByTagName(“tag”)
4.通過CLASS類選取元素
document.getElementsByClassName(“class”)
5.通過CSS選擇器選取元素
document.querySelectorAll(“css selector")
通過JavaScript獲取到元素之后,對元素的屬性、內容進行操作,
對屬性的操作
設定屬性:物件.setAttribute('屬性名', '值');
獲取屬性:物件.getAttribute('屬性名');
移除屬性:物件.removeAttribute('屬性名');
對內容的操作
設定表單的value屬性的值或元素的內容:物件.value="值";
設定指定元素標簽內的文本值: 物件.innerText="值";
介紹完這些理論后,我們以實際例子來演示,比如現在用JavaScript在百度搜索框輸入內容,
from selenium import webdriverdriver = webdriver.Chrome()driver.get('https://www.baidu.com/')# js通過id屬性獲取物件,然后設定物件的值search_js = 'document.getElementById("kw").value="selenium";'driver.execute_script(search_js)
接下來,我們看下JavaScript定位可以應用到哪些場景?
一、通過JavaScript滑動滾動條
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get('https://www.baidu.com/')driver.set_window_size(600,600)time.sleep(3)# 滾動潭訓到底部scroll_bottom_js = 'document.documentElement.scrollTop=8888;'driver.execute_script(scroll_bottom_js)time.sleep(2)# 滾動潭訓到頂部scroll_top_js = 'document.documentElement.scrollTop=0;'driver.execute_script(scroll_top_js)
二、操作日歷控制元件
以12306頁面,出發日期的日歷控制元件為例,我們先定位到控制元件,看下原始碼:
發現出發日期,有個readonly屬性,這個時候我們輸入不了日期,可以通過兩種方法:
1.去掉readonly屬性,然后send_keys輸入日期
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get('https://www.12306.cn/index/')# 通過id屬性獲取元素,然后移除移除元素的readonly屬性datetime_js = 'document.getElementById("train_date").removeAttribute("readonly");'driver.execute_script(datetime_js)time.sleep(2)driver.find_element_by_css_selector('input#train_date').clear()driver.find_element_by_css_selector('input#train_date').send_keys('2019-01-02')
2.直接通過JavaScript輸入日期
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get('https://www.12306.cn/index/')time.sleep(2)# 通過id屬性獲取元素資訊,然后value改變值datetime_js = 'document.getElementById("train_date").value="2020-11-10";'driver.execute_script(datetime_js)
三、操作多視窗
做自動化程序中,會遇到多開頁面的情況,切換多視窗會比較麻煩,這時候我可以用JavaScript來處理,
我們先看下什么時候會新開頁面,以百度頁面的新聞鏈接為例,點擊新聞鏈接會跳轉到新開頁面,
查看前端代碼發現,target="_blank",其中_blank表示新開頁面,知道了原理,那我們可以利用js去掉_blank這個屬性值或者直接洗掉target屬性,
1.js去掉_blank屬性值
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get('https://www.baidu.com/')# js修改target值為空news_js = 'document.getElementsByClassName("mnav")[0].target="";'driver.execute_script(news_js)time.sleep(2)driver.find_element_by_link_text("新聞").click()
2.js洗掉target屬性
from selenium import webdriverdriver = webdriver.Chrome()driver.get('https://www.baidu.com/')# js去掉target屬性news_js = 'document.getElementsByClassName("mnav")[0].removeAttribute("target");'driver.execute_script(news_js)driver.find_element_by_link_text("新聞").click()

感謝每一個認真閱讀我文章的人,看著粉絲一路的上漲和關注,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
① 2000多本軟體測驗電子書(主流和經典的書籍應該都有了)
② 軟體測驗/自動化測驗標準庫資料(最全中文版)
③ 專案原始碼(四五十個有趣且經典的練手專案及原始碼)
④ Python編程語言、API介面自動化測驗、web自動化測驗、App自動化測驗(適合小白學習)

⑤ Python學習路線圖(告別不入流的學習)
在我的QQ技術交流群里(技術交流和資源共享,廣告進來腿給你打斷)
可以自助拿走,群號953306497(備注“csdn111”)群里的免費資料都是筆者十多年測驗生涯的精華,還有同行大神一起交流技術哦,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293887.html
標籤:其他
