整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          js 跳轉頁面方式詳解

          indow:典型情況下, 瀏覽器會為每一個打開的html創建對應的window對象, 如果這個文檔包含了多個框架(), 則瀏覽器會為原始文檔建立一個window對象, 再為每個框架創建額外的window對象。

          可以再當前窗口中直接使用window的全部屬性、方法和集合, 即不需要在前面附加計算結果為當前window對象的表達式。雖然window可以省略, 但是為了方便閱讀以及避免一些漏洞, 一般都使用這個關鍵字。

          location:該對象包含當前url信息, 擁有多個屬性。默認屬性為 location.href,表示整個url, 即如果設置location="https://www.xxxxxx.com/", 則等同于location.href="https://www.xxxxxx.com/"。

          第一種:超鏈接

          <a href="https://www.xxxxxx.com/" title="百度">Welcome</a>

          等效于

          //在同當前窗口中打開窗口

          window.location.href="https://www.xxxxxx.com/";

          第二種:超鏈接

          <a href="https://www.xxxxxx.com/" title="百度" target="_blank">Welcome</a>

          等效于

          //在另外新建窗口中打開窗口

          window.open("https://www.xxxxxx.com/");

          第3種:window.navigate("https://www.xxxxxx.com/"); //只對ie瀏覽器有效, 其他瀏覽器無效, 不建議使用。

          第4種:

          self.location='https://www.xxxxxx.com/'; //self:當前窗口對象

          第5種:

          top.location='https://www.xxxxxx.com/'; //top父窗口對象 頁面跳出框架

          第4種和第5種聯合使用, 可以防止別人用iframe等框架引用你的頁面。

          //反之iframe等框架引用

          if(top.location.href != self.location.href){
          		window.location.href="https://www.xxxxxx.com/";
          }

          第6種:

          、良生- input type=file與文件上傳

          本文所說的input type=file指的是type類型是file的input元素,最簡HTML代碼如下:

          <input type=file>

          但是,為了習慣,我們多寫成:

          <input type="file">

          在HTML5出現之前(XHTML),我們的閉合規則則有些出入:

          <input type="file" />

          顧名思義,選擇文件,并上傳文件。

          在萬惡的舊時代,HTML5還沒有出現之前,原生的file input表單元素只能讓我們一次上傳一張圖片。無法滿足一次上傳多圖的交互需求,所以,很多場景,就被swfupload.js給取代了,有點逐漸淡出人們視野的感覺。

          然,技術發展,日新月異,三十年河東,三十年河西。隨著原生HTML5表單對多圖(multiple屬性)、上傳前預覽,二進制上傳等支持越來越廣泛,原生的file input表單元素又迎來了新的升級,flash為背景的swfupload.js注定要落寞。

          但是,對于PC項目,IE8-IE9瀏覽器還是不能忽略的。所以,現在,很流行的一種處理方式,就是HTML5 file上傳和flash swfupload上傳一起整合的模式,優先使用原生HTML5上傳,不支持的,使用flash上傳。我之前有篇關于HTML5上傳的文章,每天訪問量很高的:“基于HTML5的可預覽多圖片Ajax上傳”,大家有興趣可以看看。

          如果想使用瀏覽器原生特性實現文件上傳(如圖片)效果,父級的form元素有個東西不能丟,就是:

          enctype="multipart/form-data"

          enctype屬性規定在發送到服務器之前應該如何對表單數據進行編碼,默認的編碼是:”application/x-www-form-urlencoded“。對于普通數據是挺適用的,但是,對于文件,科科,就不能亂編碼了,該什么就是什么,只能使用multipart/form-data作為enctype屬性值。

          無論是舊時代的單圖上傳,還是HTML5中的多圖上傳,均是如此。

          文件,尤其圖片,上場前能夠預覽,是很棒的交互體驗。不走服務器,不耗費流量,多棒!

          理想雖好,實現起來……

          在HTML5還沒出現的舊時代,只有低版本的IE瀏覽器貌似有方法,使用私有的濾鏡,超越安全的限制(其實是利用了不好的東西),實現圖片直接預覽;但是呢,那個時候,Chrome, FireFox沒有這一出,于是,想要使用原生file input實現圖片的上傳前預覽,兼容性坎很難跨過去。

          但是,后來,HTML5來了,我們出現了轉機,IE10+以及其他現代瀏覽器,可以讓我們直接讀取圖片的數據,然后在頁面上呈現,實現了上傳前預覽;加上之前老IE的濾鏡策略,貌似,可行。但是呢但是,老的IE瀏覽器只能最多一次選擇一個文件,因此,只有單圖上傳的時候,大家可以考慮考慮。

          傳統的form提交,是要改變頁面流的,也就是刷新后跳轉。好的體驗應該是走Ajax交互的。HTML5里面支持二進制formData數據提交,因此,可以從容Ajax提交上傳的文件數據;那老舊的IE瀏覽器怎么辦?

          一般方法如下:

          <form action="" method="post" enctype="multipart/form-data" target="uploadIframe">< <iframe id="uploadIframe"></iframe>

          var doc = iframe.contentDocument ? iframe.contentDocument : frames[iframe.id].document; var response = doc.body && doc.body.innerHTML;

          OK, 當然,你也可以不用像上面這么麻煩,直接使用jquery.form.js. 原理呢,就是上面這樣,但是,不需要這么麻煩。

          原生的file input不收待見的另外一個原因是:長的丑還不好控制。

          舉個例子,下圖這個“選擇文件”這幾個文字,我們就不好對file控件動刀子實現自定義:

          file input框

          怎么辦呢?

          有一種方法是這樣的: 讓file類型的元素透明度0,覆蓋在我們好看的按鈕上。然后我們去點擊好看的按鈕,實際上點擊是是file元素。

          然而,此方法有一些不足:

          更好的方法是,使用label元素與file控件關聯,好處在于:

          <label class="ui_button ui_button_primary" for="xFile">上傳文件</label> <form><input type="file" id="xFile" style="position:absolute;clip:rect(0 0 0 0);"></form>

          效果如下(真實實時效果):

          input file類型控件有一個屬性,名為

          accept

          , 可能有些小伙伴不太了解。可以用來指定瀏覽器接受的文件類型,也就是的那個我們打開系統的選擇文件彈框的時候,默認界面中呈現的文件類型。例如:

          accept="image/jpeg"

          ,則界面中只有jpg圖片,如下截圖,同時,窗體右下方是“自定義文件”按鈕:

          自定義文件

          實際開發的時候,很少只允許傳jpg圖片,應該都是只能傳圖片類型,此時,可以使用:

          accept="image/*"

          于是乎,“自定義文件”按鈕變成了語義更明確的“圖片文件”:

          圖片文件

          accept屬性值其實是MIME類型, 例如下面幾個可能常用的:

          accept="application/pdf" accept="audio/x-mpeg" accept="text/html" .accept="video/x-mpeg2"

          然后,多個屬性值使用逗號分隔,例如:

          <input accept="audio/*,video/*,image/*">

          現代瀏覽器直接value = "", 有些IE瀏覽器貌似不行,好像使用file.outerHTML = file.outerHTML,我自己沒測試。

          不過我覺得比較麻煩,還要判斷瀏覽器什么的。像本文的Ajax單圖上傳,直接form.reset()就可以了。

          以上~

          本文為原創文章,會經常更新知識點以及修正一些錯誤,因此轉載請保留原出處,方便溯源,避免陳舊錯誤知識的誤導,同時有更好的閱讀體驗。

          . 介紹

          1.1 介紹

          福哥在使用selenium實現頁面爬取的時候發現遇到包含框架(frame)的網頁時候就無法通過find_xxx方法得到頁面上的元素,這可真是麻煩了啊!

          福哥在使用F12調試前端的時候發現在調試面板的控制臺欄里就可以選擇頁面上面的任意一個框架(frame)作為當前框架,如果selenium也可以選擇頁面上面的框架就好了!

          經過一番折騰,福哥找到了答案!

          2. 框架頁面

          這是一個包含多級框架的頁面,下面的代碼都是以抓取這個頁面作為示例的。

          3. 通過id定位

          如果頁面內的frame有id的話,可以直接定位。

          chrome.get("http://192.168.2.168/tfams/test.html")
          chrome.switch_to_frame("top")
          print(chrome.find_element_by_tag_name("h3").text)

          4. 通過name定位

          如果頁面內的frame有name的話,可以直接定位。

          chrome.get("http://192.168.2.168/tfams/test.html")
          chrome.switch_to_frame("content")
          print(chrome.find_element_by_tag_name("h3").text)

          5. 通過元素定位

          如果頁面的frame既沒有id也沒有name的話,只能通過標簽選擇了。

          chrome.get("http://192.168.2.168/tfams/test.html")
          iframes = chrome.find_elements_by_tag_name("iframe")
          chrome.switch_to_frame(iframes[0])
          print(chrome.find_element_by_tag_name("h3").text)

          6. 多級嵌套框架

          selenium的尋找元素是在“當前”框架內進行的,如果我們要定位的框架在“當前”框架的子級框架里面(也就是孫級框架),那么就需要一級一級地進行定位了。

          chrome.get("http://192.168.2.168/tfams/test.html")
          chrome.switch_to_frame("content")
          chrome.switch_to_frame("sub1")
          print(chrome.find_element_by_tag_name("h3").text)

          7. 返回上級框架

          上一例當中我們將“當前”框架移動到了最里面的sub1上,如果要定位sub2框架就需要先回到content框架,這個時候就需要使用返回上級框架的功能了。

          返回上級框架功能通過switch_to.parent_frame方法實現。

          chrome.get("http://192.168.2.168/tfams/test.html")
          chrome.switch_to_frame("content")
          chrome.switch_to_frame("sub1")
          print(chrome.find_element_by_tag_name("h3").text)
          chrome.switch_to.parent_frame()
          chrome.switch_to_frame("sub2")
          print(chrome.find_element_by_tag_name("h3").text)

          8. 返回頂級框架

          如果框架層級很多,我們希望一下回到最外層的框架,可以使用switch_to.default_content方法實現。

          chrome.get("http://192.168.2.168/tfams/test.html")
          chrome.switch_to_frame("content")
          chrome.switch_to_frame("sub1")
          print(chrome.find_element_by_tag_name("h3").text)
          chrome.switch_to.default_content()
          chrome.switch_to_frame("top")
          print(chrome.find_element_by_tag_name("h3").text)

          9. 切換框架的兩種方法

          selenium切換框架提供了兩種方法,福哥分別介紹一下。

          9.1 通過switch_to_frame方法

          一個是通過Chrome實例的switch_to_frame方法實現。

          chrome.get("http://192.168.2.168/tfams/test.html")
          chrome.switch_to_frame("top")
          print(chrome.find_element_by_tag_name("h3").text)

          9.2 通過switch_to.frame方法

          一個是通過Chrome實例的switch_to屬性對象的frame方法實現。

          chrome.get("http://192.168.2.168/tfams/test.html")
          chrome.switch_to.frame("top")
          print(chrome.find_element_by_tag_name("h3").text)

          10. 總結

          今天福哥帶著大家學會了在selenium里面切換“當前”框架的方法,無論是一級框架結構,還是多級框架結構,我們都可以游刃有余地定位它們了。

          框架設計在管理系統里面出現的比率還是非常高的,越是功能強大的系統使用的框架結構就會越復雜,要能夠模擬用戶操作這樣的系統需要靈活掌握切換框架的技巧才行。


          https://m.tongfu.net/home/35/blog/513253.html


          主站蜘蛛池模板: 久久无码人妻精品一区二区三区| 国产91精品一区| 黑人大战亚洲人精品一区| 日韩精品无码Av一区二区| 国产乱码精品一区二区三区四川| 亚洲国产精品一区二区久久| 无码精品一区二区三区免费视频| 99偷拍视频精品一区二区| 无码毛片一区二区三区中文字幕| 香蕉视频一区二区| 日韩精品人妻一区二区三区四区 | 亚洲欧美国产国产综合一区 | 激情无码亚洲一区二区三区| 精品无码综合一区| 在线观看精品一区| 国产成人精品一区二区秒拍| 亚洲一区二区三区无码国产| 一区二区三区四区在线观看视频| 性无码免费一区二区三区在线| 午夜无码一区二区三区在线观看| 久久久久久人妻一区精品 | 日本不卡在线一区二区三区视频| 视频一区二区三区在线观看| 精品国产一区二区三区久久久狼| 中日韩一区二区三区| 中文字幕一区二区三区视频在线| 无码精品久久一区二区三区| 精品国产亚洲第一区二区三区| 免费精品一区二区三区第35| 丝袜人妻一区二区三区| 精品一区二区三区高清免费观看 | 欧美日韩综合一区二区三区| 日韩精品一区二区三区中文精品| 国产综合精品一区二区三区| 免费在线观看一区| 亚洲综合国产一区二区三区| 久久婷婷久久一区二区三区| 国产成人久久精品区一区二区| 国产福利一区二区三区在线观看 | 亚洲国产成人久久综合一区77| 亚洲av无码天堂一区二区三区|