欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中Selenium+Webdriver實現(xiàn)自動化登錄

 更新時間:2023年09月12日 11:11:59   作者:愛編程的魚  
本文主要介紹了python中Selenium+Webdriver實現(xiàn)自動化登錄,包括測試環(huán)境的搭建、代碼編寫、以及注意事項等,具有一定的參考價值,感興趣的可以了解一下

最近做一項工作,需要自動化登錄某個網(wǎng)站并實現(xiàn)爬蟲,在此總結(jié)分享一下相關(guān)的技術(shù)。

環(huán)境準備

首先我們需要安裝python環(huán)境,chrome瀏覽器,selenium包和chromedriver。前兩者較為基礎(chǔ),就不多贅述了。下載selenium包在命令行里pip install selenium即可。對于chromedriver,首先在在chrome的設(shè)置里查看自己的chrome版本:

然后前往網(wǎng)站http://chromedriver.storage.googleapis.com/index.html,找到與你的chrome版本對應(yīng)的chromedriver的版本,比如我的就是87.0.4280.88。

下載解壓后將解壓出的chromedriver.exe文件放在python的安裝目錄下,如下圖所示,這樣就完成了selenium+chromedriver的配置,接下來我們就可以編寫代碼完成自動化登錄了。

基礎(chǔ)知識

Selenium是ThoughtWorks專門為Web應(yīng)用而開發(fā)的自動化測試工具, 適合進行功能測試、驗收測試,同時支持所有基于web的管理任務(wù)自動化。主要功能包括:測試與瀏覽器的兼容性,測試你的應(yīng)用程序看是否能夠很好得工作在不同瀏覽器和操作系統(tǒng)之上。測試系統(tǒng)功能,創(chuàng)建回歸測試檢驗軟件功能和用戶需求。

首先介紹一些編寫代碼所需的基礎(chǔ)知識

網(wǎng)頁html代碼

HTML稱為超文本標記語言,是一種標記語言。它包括一系列標簽.通過這些標簽可以將網(wǎng)絡(luò)上的文檔格式統(tǒng)一,使分散的Internet資源連接為一個邏輯整體。它的整體結(jié)構(gòu)如下圖所示。

一個示例的HTML代碼如下所示:

<!DOCTYPE html>
<html>
<head>
	<title>我的網(wǎng)頁</title>
</head>
<body>
<div class="main">
	<a  rel="external nofollow" >百度一下</a>
        <button id="btn">點我</button>
</div>
</body>
</html>

可見,HTML的代碼由一系列HMTL標簽(tag)和字符串構(gòu)成。代碼中的尖括號括起來的文本如<html>、<body>、<a>、<b>就是網(wǎng)頁標簽,通常成對構(gòu)成。比如對于<html>,起始標簽為<html>,結(jié)束標簽為</html>。

HTML文件使用網(wǎng)頁瀏覽器打開時,瀏覽器內(nèi)置的布局引擎將文檔顯示成我們看到的樣子。對瀏覽器軟件而言,它讀取網(wǎng)頁文檔內(nèi)容時,同時根據(jù)特定標簽名構(gòu)建一個HTML DOM樹,這里的DOM是Document Object Model,即文檔對象模型。這個樹根據(jù)讀入的HTML文檔形成根節(jié)點、子節(jié)點,如上文檔的DOM樹結(jié)構(gòu)為:

圖上看到節(jié)點之間有層級關(guān)系,如head和body為文檔根節(jié)點的子節(jié)點,head標簽內(nèi)部的title則為其子節(jié)點,body內(nèi)部的div為其子節(jié)點,下一級的a和button之間為兄弟節(jié)點,與div為父子關(guān)系。

如果我們需要登錄,或者模擬點擊網(wǎng)頁上的一些按鈕,就需要找到其對應(yīng)的標簽,定位其對應(yīng)的元素,而這就需要selenium。使用python+selenium來定位網(wǎng)頁上的html標簽,實現(xiàn)自動化登錄。

使用selenium進行元素定位

使用selenium進行元素定位主要有2種方法,一種是直接定位法,也就是直接通過標簽的id、class名、tag名、name、link文字、CSS等定位元素。

<span class="bg s_ipt_wr quickdelete-wrap">
<span class="soutu-btn"></span>
<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">
<a id="quickdelete" class="quickdelete" href="javascript:;" rel="external nofollow"  title="清空" style="top: 0px; right: 0px; display: none;"></a>
</span>
<span class="bg s_btn_wr">
<input id="su" class="bg s_btn" type="submit" value="百度一下">
</span>

比如對應(yīng)上面的一個html代碼片段,如果想定位輸入,要怎么定位呢?

  • 使用id進行定位:一個頁面的id是唯一的(只要id不是動態(tài)的)

標準形式:find_element_by_id("id_vaule")

對應(yīng)上面代碼也就是:find_element_by_id("kw")

  • 使用class名進行定位:class名可能重復(fù)

標準形式:find_element_by_class_name("class_name")

對應(yīng)上面代碼也就是:find_element_by_class_name("s_ipt")

  • 使用標簽名定位:最容易重復(fù)

標準形式:find_element_by_tag_name("tag_name")

對應(yīng)上面代碼也就是:find_element_by_class_name("input")

  • 使用name定位:name可能重復(fù)

標準形式:find_element_by_name("name")

對應(yīng)上面代碼也就是:find_element_by_name("wd")

  • 使用link文字定位:(以上文百度的代碼為例)

標準形式:find_element_by_link_text("text_value")

對應(yīng)上面代碼也就是:find_element_by_link_text("百度一下")

除了直接定位,還有一種方法更萬能,但是也更復(fù)雜,它就是find_element_by_xpath()方法,它有很多種定位方式。

屬性定位

find_element_by_xpath("//標簽名[@屬性='屬性值']")

屬性實例
id屬性find_element_by_xpath("//input[@id='kw']")
class屬性find_element_by_xpath("//input[@class='s_ipt']")
name屬性find_element_by_xpath("//input[@name='wd']")
maxlength屬性find_element_by_xpath("//input[@maxlength='255']")

標簽定位

如指所有input標簽元素:find_element_by_xpath("//input")

內(nèi)容定位

<p id="jgwab">
<i class="c-icon-jgwablogo"></i>
京公網(wǎng)安備11000002000001號
</p>
比如上面這段html代碼,就可以使用find_element_by_xpath("http://p[contains(text(),'京公網(wǎng)')]")來定位

組合定位

find_element_by_xpath("//input[@class='s_ipt' and @name='wd']") 指的是input標簽下id屬性為kw且name屬性為wd的元素

自頂向下路徑選擇

xpath()顧名思義,它是一個path,有的時候你不能直接定位到一個元素的標簽,你就要從一個可以定位的根節(jié)點一路定位下來。比如//input[@name='wd']/li[3]/input/a,這個路徑指的是你先定位到name屬性為wd的input標簽,在定位到它的第3個li子節(jié)點,接著是下面的input子節(jié)點,最后是input下的a子節(jié)點。通過這樣的一種方式來最終定位到需要的元素,值得注意的是,標號是從1開始計數(shù),不是從0開始計數(shù)。

代碼編寫

學習完基礎(chǔ)知識,下面以一個實例的方式來介紹如何進行自動化登錄:“自動化登陸北航vpn網(wǎng)站并進入任意網(wǎng)頁”(原理都是一致的,大家可以選擇自己學校的校園網(wǎng)或一些其他網(wǎng)站來練習)

首先我們獲得北航vpn的登錄網(wǎng)頁:

browser = webdriver.Chrome()
browser.get('https://e1.buaa.edu.cn/users/sign_in')

這樣我們就打開了登陸界面,是這樣子的:

點擊chrome瀏覽器右上角,更多工具——選擇“開發(fā)者工具”。我們就得到了下面的頁面。

下面我們要找到登錄的賬號輸入位置,密碼輸入位置,以及提交按鈕。當我們將鼠標放在右側(cè)代碼上時,左側(cè)會出現(xiàn)其多對應(yīng)的區(qū)域,使用這種方法,我們可以一點一點定位如下:

可見右側(cè)input標簽就是輸入框了,它有一個id是user_login,我們上文講過,id如果不是動態(tài)id那就是獨一無二的,可以直接獲取,因此可以直接通過如下指令輸入賬號(密碼同理):

browser.find_element_by_id("user_login").send_keys("賬號")
browser.find_element_by_id("user_password").send_keys("密碼")
# 其中使用send_keys()方法來送入數(shù)據(jù)

那么如何點擊登錄呢,同樣我們找到對應(yīng)的標簽:

可見有一個name是commit,很幸運,這個界面上只有這一個元素的name是commit,因此可以直接通過name獲取,接著調(diào)用.click()方法就可以完成點擊登錄。

browser.find_element_by_name("commit").click()

登錄完成后是這個樣子:

比如這時,我想登錄北航圖書館,要怎么做呢?

同樣的道理,打開開發(fā)者工具,找到北航圖書館對應(yīng)的標簽

我們這次使用find_element_by_xpath()方法來實現(xiàn)??梢娙绻ㄎ坏皆摌撕?,我們先要定位到class為container的div標簽,之后定位到其下的ul標簽,之后定位到其下的第3個li標簽,最后定位到a標簽。之后就可以登錄到北航圖書館的網(wǎng)站中去。

browser.find_element_by_xpath("http://div[@class='container']/ul/li[3]/a").click() 

以上就是本文的全部內(nèi)容,從環(huán)境配置、基礎(chǔ)知識、代碼編寫三方面全方位的講解了如何使用selenium來在chrome瀏覽器上實現(xiàn)自動化登錄。其實,好多的搶課、評教的腳本都是這樣寫出來的,大家感興趣可以嘗試一下。

到此這篇關(guān)于python中Selenium+Webdriver實現(xiàn)自動化登錄的文章就介紹到這了,更多相關(guān)Selenium+Webdriver自動化登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python制作企業(yè)郵箱的爆破腳本

    python制作企業(yè)郵箱的爆破腳本

    這篇文章主要介紹了python制作企業(yè)郵箱的爆破腳本的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Python使用Librosa進行音頻處理操作詳解

    Python使用Librosa進行音頻處理操作詳解

    Librosa是一個用于音頻和音樂分析的Python庫,提供了豐富的功能來處理和分析音頻信號,本文主要為大家介紹了如何使用Librosa進行簡單的音頻處理操作,需要的可以參考下
    2025-02-02
  • Python中.py文件和.ipynb文件的區(qū)別詳解

    Python中.py文件和.ipynb文件的區(qū)別詳解

    Python開發(fā)者常用的兩種文件格式.py和.ipynb各有特點,本教程將通過對比分析、代碼示例和場景說明,幫助開發(fā)者全面理解二者的區(qū)別與聯(lián)系,需要的朋友可以參考下
    2025-04-04
  • 最新評論