最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

環(huán)境準(zhǔ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ā)的自動化測試工具, 適合進(jìn)行功能測試、驗(yàn)收測試,同時支持所有基于web的管理任務(wù)自動化。主要功能包括:測試與瀏覽器的兼容性,測試你的應(yīng)用程序看是否能夠很好得工作在不同瀏覽器和操作系統(tǒng)之上。測試系統(tǒng)功能,創(chuàng)建回歸測試檢驗(yàn)軟件功能和用戶需求。

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

網(wǎng)頁html代碼

HTML稱為超文本標(biāo)記語言,是一種標(biāo)記語言。它包括一系列標(biāo)簽.通過這些標(biāo)簽可以將網(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">點(diǎn)我</button>
</div>
</body>
</html>

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

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

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

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

使用selenium進(jìn)行元素定位

使用selenium進(jìn)行元素定位主要有2種方法,一種是直接定位法,也就是直接通過標(biāo)簽的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進(jìn)行定位:一個頁面的id是唯一的(只要id不是動態(tài)的)

標(biāo)準(zhǔn)形式:find_element_by_id("id_vaule")

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

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

標(biāo)準(zhǔn)形式:find_element_by_class_name("class_name")

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

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

標(biāo)準(zhǔn)形式:find_element_by_tag_name("tag_name")

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

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

標(biāo)準(zhǔn)形式:find_element_by_name("name")

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

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

標(biāo)準(zhǔn)形式:find_element_by_link_text("text_value")

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

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

屬性定位

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

屬性實(shí)例
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']")

標(biāo)簽定位

如指所有input標(biāo)簽元素: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標(biāo)簽下id屬性為kw且name屬性為wd的元素

自頂向下路徑選擇

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

代碼編寫

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

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

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

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

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

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

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

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

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

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

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

登錄完成后是這個樣子:

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

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

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

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

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

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

相關(guān)文章

  • 批量將ppt轉(zhuǎn)換為pdf的Python代碼 只要27行!

    批量將ppt轉(zhuǎn)換為pdf的Python代碼 只要27行!

    這篇文章主要為大家詳細(xì)介紹了批量將ppt轉(zhuǎn)換為pdf的Python代碼,只要27行,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • python標(biāo)準(zhǔn)庫OS模塊詳解

    python標(biāo)準(zhǔn)庫OS模塊詳解

    這篇文章主要介紹了python標(biāo)準(zhǔn)庫OS模塊詳細(xì)介紹,需要的朋友可以參考下
    2020-03-03
  • Python轉(zhuǎn)換HTML到Text純文本的方法

    Python轉(zhuǎn)換HTML到Text純文本的方法

    這篇文章主要介紹了Python轉(zhuǎn)換HTML到Text純文本的方法,分析了常用的兩種方法,非常具有實(shí)用價值,需要的朋友可以參考下
    2015-01-01
  • Python中執(zhí)行存儲過程及獲取存儲過程返回值的方法

    Python中執(zhí)行存儲過程及獲取存儲過程返回值的方法

    這篇文章主要介紹了Python中執(zhí)行存儲過程及獲取存儲過程返回值的方法,結(jié)合實(shí)例形式總結(jié)分析了Python調(diào)用存儲過程的常用方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2017-10-10
  • Python實(shí)現(xiàn)豆瓣圖片下載的方法

    Python實(shí)現(xiàn)豆瓣圖片下載的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)豆瓣圖片下載的方法,涉及Python針對網(wǎng)頁操作的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Python 必須了解的5種高級特征

    Python 必須了解的5種高級特征

    Python 多好用不用多說,大家看看自己用的語言就知道了。但是 Python 隱藏的高級功能你都 get 了嗎?本文中,作者列舉了 Python 中五種略高級的特征以及它們的使用方法,快來一探究竟吧!
    2020-09-09
  • Python?讀取?.gz?文件全過程

    Python?讀取?.gz?文件全過程

    這篇文章主要介紹了Python?讀取?.gz?文件全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Django url反向解析的實(shí)現(xiàn)

    Django url反向解析的實(shí)現(xiàn)

    本文主要介紹了Django url反向解析的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • python正則表達(dá)式對字符串的查找匹配

    python正則表達(dá)式對字符串的查找匹配

    正則表達(dá)式是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”),下面這篇文章主要給大家介紹了關(guān)于python正則表達(dá)式對字符串的查找匹配的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • linux下python抓屏實(shí)現(xiàn)方法

    linux下python抓屏實(shí)現(xiàn)方法

    這篇文章主要介紹了linux下python抓屏實(shí)現(xiàn)方法,涉及Python操作屏幕截取的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05

最新評論

东阳市| 达日县| 沁水县| 定州市| 子长县| 汝阳县| 洱源县| 无为县| 晋宁县| 克山县| 通城县| 马山县| 安宁市| 扎兰屯市| 惠东县| 施甸县| 彭水| 曲沃县| 行唐县| 斗六市| 耿马| 建平县| 苏尼特左旗| 资中县| 巴塘县| 绩溪县| 乌审旗| 遵义市| 锡林郭勒盟| 昌宁县| 赣榆县| 合水县| 奉节县| 葵青区| 平山县| 寿光市| 金秀| 东兰县| 区。| 远安县| 大足县|