<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何使用Selenium WebDriver查找錯(cuò)誤的鏈接?

          共 6511字,需瀏覽 14分鐘

           ·

          2020-12-23 14:59

          ?今日互動(dòng)話題?

          今年的圣誕節(jié)你想怎么過(guò)?

          ? ? ? ? ? ? ? ? ? ?

          當(dāng)您在網(wǎng)站上遇到404 /頁(yè)面未找到/無(wú)效超鏈接時(shí),會(huì)想到什么想法?啊!當(dāng)您遇到損壞的超鏈接時(shí),您會(huì)感到煩惱,這是為什么您應(yīng)繼續(xù)專注于消除Web產(chǎn)品(或網(wǎng)站)中損壞的鏈接的唯一原因。您可以使用Selenium WebDriver來(lái)利用自動(dòng)化進(jìn)行錯(cuò)誤的鏈接測(cè)試,而無(wú)需進(jìn)行人工檢查。

          當(dāng)特定鏈接斷開并且訪問者登陸頁(yè)面時(shí),它將影響該頁(yè)面的功能并導(dǎo)致不良的用戶體驗(yàn)。無(wú)效鏈接可能會(huì)損害您產(chǎn)品的信譽(yù),因?yàn)樗翱赡堋笔鼓脑L問者感到對(duì)體驗(yàn)的關(guān)注程度最低。


          如果您的Web產(chǎn)品包含許多頁(yè)面(或鏈接),導(dǎo)致404錯(cuò)誤(或找不到頁(yè)面),則搜索引擎(例如Google)上的產(chǎn)品排名也將受到嚴(yán)重影響。刪除無(wú)效鏈接是SEO(搜索引擎優(yōu)化)活動(dòng)的組成部分之一。

          在Selenium WebDriver教程系列的這一部分中,我們將深入研究如何使用Selenium WebDriver查找斷開的鏈接。我將演示了使用Selenium Python進(jìn)行的斷開鏈接測(cè)試。


          Web測(cè)試中的斷開鏈接簡(jiǎn)介

          簡(jiǎn)單來(lái)說(shuō),網(wǎng)站(或Web應(yīng)用程序)中的損壞鏈接(或無(wú)效鏈接)是指無(wú)法訪問且無(wú)法按預(yù)期工作的鏈接。鏈接可能由于服務(wù)器問題而暫時(shí)斷開,或者在后端配置不正確。



          除了導(dǎo)致404錯(cuò)誤的頁(yè)面外,斷開鏈接的其他主要示例是格式錯(cuò)誤的URL,指向已移動(dòng)或刪除的內(nèi)容(例如,文檔,pdf,圖像等)的鏈接。


          鏈接斷開的主要原因


          以下是發(fā)生鏈接斷開(死鏈接或鏈接腐爛)的一些常見原因:


          • 用戶輸入的網(wǎng)址不正確或拼寫錯(cuò)誤。

          • 網(wǎng)站中具有URL重定向或內(nèi)部重定向的結(jié)構(gòu)更改(即永久鏈接)未正確配置。

          • 鏈接到已移動(dòng)或刪除的內(nèi)容,如視頻,文檔等。如果內(nèi)容被移動(dòng),則“內(nèi)部鏈接”應(yīng)重定向到指定的鏈接。

          • 網(wǎng)站維護(hù)導(dǎo)致網(wǎng)站暫時(shí)停機(jī),導(dǎo)致該網(wǎng)站暫時(shí)無(wú)法訪問。

          • 頁(yè)面頂部的HTML標(biāo)記損壞,JavaScript錯(cuò)誤,錯(cuò)誤的HTML / CSS自定義,嵌入式元素?fù)p壞等都可能導(dǎo)致鏈接斷開。

          • 地理位置限制會(huì)阻止從某些IP地址(如果將其列入黑名單)或世界上特定國(guó)家/地區(qū)訪問網(wǎng)站。使用Selenium進(jìn)行地理位置測(cè)試有助于確保為訪問站點(diǎn)的位置(或國(guó)家/地區(qū))量身定制體驗(yàn)。


          為什么要檢查斷開的鏈接?

          鏈接斷開對(duì)于訪問您網(wǎng)站的訪問者來(lái)說(shuō)是個(gè)很大的麻煩。這是您應(yīng)檢查網(wǎng)站上損壞的鏈接的一些主要原因:

          • 鏈接斷開可能會(huì)損害用戶體驗(yàn)。

          • 對(duì)于SEO(搜索引擎優(yōu)化)來(lái)說(shuō),刪除斷開(或失效)的鏈接至關(guān)重要,因?yàn)檫@可能會(huì)影響網(wǎng)站在搜索引擎(例如Google)上的排名。

          可以使用網(wǎng)頁(yè)上的Selenium WebDriver完成斷開的鏈接測(cè)試,然后可以使用該Selenium WebDriver刪除站點(diǎn)的斷開的鏈接。

          鏈接斷開和HTTP狀態(tài)代碼

          當(dāng)用戶訪問網(wǎng)站時(shí),瀏覽器會(huì)將請(qǐng)求發(fā)送到該網(wǎng)站的服務(wù)器。服務(wù)器使用稱為“ HTTP狀態(tài)代碼”的三位數(shù)代碼來(lái)響應(yīng)瀏覽器的請(qǐng)求。

          HTTP狀態(tài)代碼是服務(wù)器對(duì)Web瀏覽器發(fā)送的請(qǐng)求的響應(yīng)。這些HTTP狀態(tài)代碼被認(rèn)為等效于瀏覽器(從中發(fā)送URL請(qǐng)求)與服務(wù)器之間的對(duì)話。

          盡管將不同的HTTP狀態(tài)代碼用于不同的目的,但是大多數(shù)代碼對(duì)于診斷站點(diǎn)中的問題,最大程度地減少站點(diǎn)停機(jī)時(shí)間,無(wú)效鏈接的數(shù)量等很有用。每三位狀態(tài)碼的第一位以數(shù)字1?5開頭。狀態(tài)代碼表示為1xx,2xx ..,5xx,用于指示該特定范圍內(nèi)的狀態(tài)代碼。由于這些范圍中的每一個(gè)都包含不同類別的服務(wù)器響應(yīng),因此我們將討論范圍限于為斷開的鏈接提供的HTTP狀態(tài)代碼。


          以下是常見的狀態(tài)代碼類,可用于檢測(cè)Selenium斷開的鏈接:


          HTTP狀態(tài)碼的類別描述
          1xx服務(wù)器仍在考慮請(qǐng)求。
          2xx瀏覽器發(fā)送的請(qǐng)求已成功完成,服務(wù)器已將預(yù)期的響應(yīng)發(fā)送到瀏覽器。
          3xx這表明正在執(zhí)行重定向。例如,301重定向通常用于在網(wǎng)站上實(shí)施永久重定向。
          4xx這表明特定頁(yè)面(或完整站點(diǎn))無(wú)法訪問。
          5xx這表明即使瀏覽器發(fā)送了有效的請(qǐng)求,服務(wù)器也無(wú)法完成請(qǐng)求。


          在檢測(cè)到斷開的鏈接時(shí)顯示的HTTP狀態(tài)代碼

          以下是網(wǎng)絡(luò)服務(wù)器在遇到斷開的鏈接時(shí)顯示的一些常見HTTP狀態(tài)代碼:


          HTTP狀態(tài)碼描述
          400(錯(cuò)誤請(qǐng)求)服務(wù)器無(wú)法處理請(qǐng)求,因?yàn)樘岬降腢RL不正確。
          400(錯(cuò)誤請(qǐng)求-錯(cuò)誤主機(jī))這表明主機(jī)名無(wú)效,由于該主機(jī)名無(wú)法處理請(qǐng)求。
          400(錯(cuò)誤請(qǐng)求-錯(cuò)誤URL)這表明服務(wù)器無(wú)法處理請(qǐng)求,因?yàn)檩斎氲腢RL格式不正確(例如,缺少括號(hào),斜杠等)。
          400(錯(cuò)誤請(qǐng)求-超時(shí))這表明HTTP請(qǐng)求已超時(shí)。
          400(錯(cuò)誤請(qǐng)求-空)服務(wù)器返回的響應(yīng)為空,沒有內(nèi)容,也沒有響應(yīng)代碼。
          400(錯(cuò)誤請(qǐng)求-重置)這表明服務(wù)器無(wú)法處理該請(qǐng)求,因?yàn)樗τ谔幚砥渌?qǐng)求或站點(diǎn)所有者對(duì)其進(jìn)行了錯(cuò)誤配置。
          403(禁止)真正的請(qǐng)求已發(fā)送到服務(wù)器,但由于需要授權(quán),因此拒絕履行該請(qǐng)求。
          404頁(yè)面不存在)資源(或頁(yè)面)在服務(wù)器上不可用。
          408(請(qǐng)求超時(shí))服務(wù)器已超時(shí)等待請(qǐng)求。客戶端(即瀏覽器)可以在服務(wù)器準(zhǔn)備等待的時(shí)間內(nèi)發(fā)送相同的請(qǐng)求。
          410(已去)HTTP狀態(tài)代碼比404(找不到頁(yè)面)更永久。410表示該頁(yè)面已消失。
          該頁(yè)面在服務(wù)器上不可用,也未設(shè)置任何轉(zhuǎn)發(fā)(或重定向)機(jī)制。指向410頁(yè)的鏈接將訪問者發(fā)送到無(wú)效資源。
          503服務(wù)不可用)這表明服務(wù)器暫時(shí)超載,因此服務(wù)器無(wú)法處理請(qǐng)求。這也可能意味著正在服務(wù)器上進(jìn)行維護(hù),從而指示搜索引擎有關(guān)站點(diǎn)的臨時(shí)停機(jī)時(shí)間。


          如何使用Selenium WebDriver查找斷開的鏈接?

          不論Selenium WebDriver使用哪種語(yǔ)言,使用Selenium進(jìn)行斷開鏈接測(cè)試的指導(dǎo)原則都保持不變。以下是使用Selenium WebDriver測(cè)試斷開的鏈接的步驟:


          1. 使用標(biāo)簽收集網(wǎng)頁(yè)上所有鏈接的詳細(xì)信息。

          2. 為每個(gè)鏈接發(fā)送一個(gè)HTTP請(qǐng)求。

          3. 驗(yàn)證為響應(yīng)上一步中發(fā)送的請(qǐng)求而收到的相應(yīng)響應(yīng)代碼。

          4. 根據(jù)服務(wù)器發(fā)送的響應(yīng)代碼驗(yàn)證鏈接是否斷開。

          5. 對(duì)頁(yè)面上存在的每個(gè)鏈接重復(fù)步驟(2-4)。


          在本Selenium WebDriver教程中,我們將演示如何使用Selenium WebDriver在Python,Java,C#和PHP中執(zhí)行斷開的鏈接測(cè)試。測(cè)試是在(Chrome 85.0 + Windows 10)組合上進(jìn)行的,執(zhí)行是在LambdaTest提供的基于云的Selenium Grid上進(jìn)行的。

          要開始使用LambdaTest,請(qǐng)?jiān)谄脚_(tái)上創(chuàng)建一個(gè)帳戶,并注意LambdaTest的個(gè)人資料部分中提供的用戶名和訪問密鑰。瀏覽器功能是使用LambdaTest功能生成器生成的。

          這是用于使用Selenium查找網(wǎng)站上斷開鏈接的測(cè)試方案:


          測(cè)試場(chǎng)景


          1. 轉(zhuǎn)到軟件測(cè)試test面試小程序后臺(tái),即Chrome 85.0上的https://www.test-1.com/

          2. 收集頁(yè)面上存在的所有鏈接

          3. 發(fā)送每個(gè)鏈接的HTTP請(qǐng)求

          4. 在終端上打印鏈接是否斷開


          重要的是要注意,使用Selenium測(cè)試斷開的鏈接所花費(fèi)的時(shí)間取決于“被測(cè)網(wǎng)頁(yè)”上存在的鏈接數(shù)量。頁(yè)面上的鏈接數(shù)量越多,將花費(fèi)更多的時(shí)間來(lái)查找斷開的鏈接。例如,LambdaTest有大量的鏈接(?150 +);因此,查找斷開的鏈接的過(guò)程可能需要一些時(shí)間(大約幾分鐘)。


          使用Selenium python的錯(cuò)誤鏈接測(cè)試


          import requestsimport urllib3import pytestfrom requests.exceptions import MissingSchema, InvalidSchema, InvalidURLfrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.keys import Keyscapabilities = {"build" : "[Python] 使用Selenium在網(wǎng)頁(yè)上查找錯(cuò)誤的鏈接","name" : "[Python] 使用Selenium在網(wǎng)頁(yè)上查找錯(cuò)誤的鏈接","platform" : "Windows 10","browserName" : "Chrome","version" : "85.0"}user_name = "user-name"app_key = "access-key"broken_links = 0valid_links = 0# options = webdriver.ChromeOptions()# options.add_argument("start-maximized")# options.add_argument('disable-infobars')# driver=webdriver.Chrome(options=options)urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)remote_url?=?"http://"?+?user_name?+?":"?+?app_key?+?"@test-1.top/login/"driver = webdriver.Remote(command_executor = remote_url, desired_capabilities = capabilities)driver.maximize_window()driver.get('https://www.test-1.top/login/')# links = driver.find_elements_by_css_selector("a")links = driver.find_elements(By.CSS_SELECTOR, "a")for link in links:try:request = requests.head(link.get_attribute('href'), data ={'key':'value'})print("Status of " + link.get_attribute('href') + " is " + str(request.status_code))if (request.status_code == 404):broken_links = (broken_links + 1)else:valid_links = (valid_links + 1)except requests.exceptions.MissingSchema:print("Encountered MissingSchema Exception")except requests.exceptions.InvalidSchema:print("Encountered InvalidSchema Exception")except:print("Encountered Some other execption")print("Detection of broken links completed with " + str(broken_links) + " broken links and " + str(valid_links) + " valid links")

          ? ?

          代碼遍歷

          1.導(dǎo)入模塊

          除了為Selenium WebDriver導(dǎo)入Python模塊之外,我們還導(dǎo)入了請(qǐng)求模塊。請(qǐng)求模塊使您可以發(fā)送各種HTTP請(qǐng)求。它也可以用于在URL中傳遞參數(shù),發(fā)送自定義標(biāo)頭等。

          import requestsimport urllib3from requests.exceptions import MissingSchema, InvalidSchema, InvalidURL

          ? ? ?

          2.收集頁(yè)面上存在的鏈接

          通過(guò)CSS選擇器“ a”屬性找到Web元素,可以找到被測(cè)URL上存在的鏈接(即cnds博客)。

          links = driver.find_elements(By.CSS_SELECTOR, "a")

          由于我們希望元素是可迭代的,因此我們使用find_elements方法(而不是find_element方法)。

          3.遍歷URL以進(jìn)行驗(yàn)證

          請(qǐng)求模塊的head方法用于將HEAD請(qǐng)求發(fā)送到指定的URL。get_attribute方法的每一個(gè)環(huán)節(jié)上用于獲取“?HREF?”錨標(biāo)記的屬性。

          方法在僅場(chǎng)景主要用于STATUS_CODE是必需的或HTTP標(biāo)頭,和該文件的內(nèi)容(或URL)是不需要的。head方法返回request.Response對(duì)象,該對(duì)象還包含HTTP狀態(tài)代碼(即request.status_code)。

          for link in links:    try:        request = requests.head(link.get_attribute('href'), data ={'key':'value'})        print("Status of " + link.get_attribute('href') + " is " + str(request.status_code))

          重復(fù)執(zhí)行同一組操作,直到用完頁(yè)面上所有的“鏈接”。

          4.通過(guò)狀態(tài)碼驗(yàn)證鏈接

          如果在步驟(3)中發(fā)送的HTTP請(qǐng)求的HTTP響應(yīng)代碼為404(即,找不到頁(yè)面),則表示該鏈接是斷開的鏈接。對(duì)于未斷開的鏈接,HTTP狀態(tài)代碼為200。

          if (request.status_code == 404):    broken_links = (broken_links + 1)else:    valid_links = (valid_links + 1)

          ?

          5.跳過(guò)無(wú)關(guān)的請(qǐng)求

          當(dāng)head方法應(yīng)用于不包含“ href”屬性的鏈接(例如mailto,電話等)時(shí),將導(dǎo)致異常(即MissingSchema,InvalidSchema)。

          except requests.exceptions.MissingSchema:    print("Encountered MissingSchema Exception")except requests.exceptions.InvalidSchema:    print("Encountered InvalidSchema Exception")except:    print("Encountered Some other execption")

          ?

          這些異常被捕獲,并且在終端上打印相同的內(nèi)容。

          執(zhí)行

          我在這里使用PyUnit(或unittest),它是Python中的默認(rèn)測(cè)試框架,用于使用Selenium進(jìn)行的斷開鏈接測(cè)試。在終端上運(yùn)行以下命令:

          python Broken_Links.py


          結(jié)論


          錯(cuò)誤的鏈接(也稱為無(wú)效鏈接或爛鏈接)可能會(huì)妨礙用戶體驗(yàn),如果它們存在于網(wǎng)站上。鏈接斷開也會(huì)影響搜索引擎的排名。因此,對(duì)于與網(wǎng)站開發(fā)和測(cè)試有關(guān)的活動(dòng),應(yīng)定期進(jìn)行斷開的鏈接測(cè)試。

          往期推薦


          測(cè)試自動(dòng)化框架的類型| 您應(yīng)該知道的一切-軟件測(cè)試材料

          自動(dòng)化測(cè)試與手動(dòng)測(cè)試 必須知道的重要差異

          Python+webdriver定位元素的幾種方法

          Python 位操作符(Bitwise)

          數(shù)據(jù)驅(qū)動(dòng)框架(Apache POI – Excel)



          瀏覽 25
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青娱乐,青娱乐老视频 | 狂野欧美大鸡巴操逼 | 久久久久久成人影片 | AV无需播放器 | 青青草超碰免费 |