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

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

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

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

環(huán)境準(zhǔn)備

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

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

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

基礎(chǔ)知識(shí)

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

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

網(wǎng)頁html代碼

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

一個(gè)示例的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)成。代碼中的尖括號(hào)括起來的文本如<html>、<body>、<a>、<b>就是網(wǎng)頁標(biāo)簽,通常成對(duì)構(gòu)成。比如對(duì)于<html>,起始標(biāo)簽為<html>,結(jié)束標(biāo)簽為</html>。

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

圖上看到節(jié)點(diǎn)之間有層級(jí)關(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),下一級(jí)的a和button之間為兄弟節(jié)點(diǎn),與div為父子關(guān)系。

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

使用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>

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

  • 使用id進(jìn)行定位:一個(gè)頁面的id是唯一的(只要id不是動(dòng)態(tài)的)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

代碼編寫

學(xué)習(xí)完基礎(chǔ)知識(shí),下面以一個(gè)實(shí)例的方式來介紹如何進(jìn)行自動(dòng)化登錄:“自動(dòng)化登陸北航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ā)者工具”。我們就得到了下面的頁面。

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

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

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

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

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

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

登錄完成后是這個(gè)樣子:

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

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

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

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

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

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

相關(guān)文章

  • selenium學(xué)習(xí)教程之定位以及切換frame(iframe)

    selenium學(xué)習(xí)教程之定位以及切換frame(iframe)

    這篇文章主要給大家介紹了關(guān)于selenium學(xué)習(xí)教程之定位以及切換frame(iframe)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python中幾種自動(dòng)微分庫解析

    python中幾種自動(dòng)微分庫解析

    這篇文章主要介紹了python中幾種自動(dòng)微分庫解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 用Python替換證件照背景顏色

    用Python替換證件照背景顏色

    大家好,本篇文章主要講的是用Python替換證件照背景顏色,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • python庫構(gòu)建之pyproject.toml配置文件詳解

    python庫構(gòu)建之pyproject.toml配置文件詳解

    pyproject.toml是Python項(xiàng)目標(biāo)準(zhǔn)化配置文件,由PEP?518引入,用于定義構(gòu)建系統(tǒng)、項(xiàng)目元數(shù)據(jù)和依賴管理,它替代了傳統(tǒng)的setup.cfg文件,通過指定構(gòu)建工具如setuptools或poetry,管理項(xiàng)目依賴,配置工具行為等,需要的朋友可以參考下
    2024-09-09
  • pandas 時(shí)間格式轉(zhuǎn)換的實(shí)現(xiàn)

    pandas 時(shí)間格式轉(zhuǎn)換的實(shí)現(xiàn)

    這篇文章主要介紹了pandas 時(shí)間格式轉(zhuǎn)換的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 詳解如何在PyQt5中實(shí)現(xiàn)平滑滾動(dòng)的QScrollArea

    詳解如何在PyQt5中實(shí)現(xiàn)平滑滾動(dòng)的QScrollArea

    Qt 自帶的 QScrollArea 滾動(dòng)時(shí)只能在兩個(gè)像素節(jié)點(diǎn)之間跳變,看起來很突兀。所以本文將通過定時(shí)器,重寫 wheelEvent() 來實(shí)現(xiàn)平滑滾動(dòng),需要的可以參考一下
    2023-01-01
  • Python面向?qū)ο笾惡蛯?duì)象

    Python面向?qū)ο笾惡蛯?duì)象

    這篇文章主要為大家介紹了Python類和對(duì)象,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • python制作企業(yè)郵箱的爆破腳本

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

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

    Python使用Librosa進(jìn)行音頻處理操作詳解

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

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

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

最新評(píng)論