pythone selenium 的第一次使用經(jīng)歷

最近要一直在網(wǎng)站上填報(bào)東西,不勝其煩,突然想到就沒(méi)有什么東西能自動(dòng)控制瀏覽器嗎,于是就去一頓的搜索和ai詢(xún)問(wèn),得到一個(gè)解決方案就是 selenium 的網(wǎng)站自動(dòng)化測(cè)試工具可以實(shí)現(xiàn)。

一、初入江湖篇

  1. 首先,先去官網(wǎng)看了看介紹 selenium 官網(wǎng)地址:https://www.selenium.dev/ 里面有 webDriver 、IDE 、Gird, 看完介紹,在瀏覽器安裝一個(gè) IDE 來(lái)試試先。 先體驗(yàn)一下自動(dòng)化的感覺(jué)。
    微信截圖_20240704092811.png
  2. 然后你就會(huì)得到一個(gè)瀏覽器的插件 ,安裝好插件以后,運(yùn)行就會(huì)出來(lái)一個(gè)單獨(dú)的瀏覽器框。


    微信截圖_20240704093032.png

    微信截圖_20240704093221.png

    微信截圖_20240704093257.png

    3.最后按照教程去看看這玩意兒怎么用,大概就是創(chuàng)建一個(gè)任務(wù),輸入一個(gè)要訪問(wèn)的網(wǎng)站的鏈接,然后你就可以開(kāi)始錄制你的操作了,可以暫停,開(kāi)始、最后錄制完成點(diǎn)停止。然后就可以點(diǎn)擊播放 將你剛剛錄制的操作都重新來(lái)一遍以后就會(huì)暫停了。 最后,這個(gè)東西還可以導(dǎo)出代碼。

二、小試牛刀

  1. 我在selenium IDE 導(dǎo) 代碼的基礎(chǔ)上進(jìn)行了些調(diào)整,廢話(huà)不多說(shuō) ,先貼完成的代碼:
# Generated by Selenium IDE
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# options = Options()
# 指定Chrome的debug地址 和前面命令行中啟動(dòng)參數(shù)一致
# 這樣,就會(huì)直接自動(dòng)化剛才啟動(dòng)的瀏覽器
# options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

# driver = webdriver.Chrome(options=options)
driver = webdriver.Chrome()
driver.implicitly_wait(200)

driver.get("http://你自己的網(wǎng)站地址")
# 2 | setWindowSize | 1936x1056 |
driver.set_window_size(1936, 1056)

namelist = [
    'J2023-003號(hào)地塊', 'KC2011-41號(hào)地塊'
]

noR = []

driver.find_element(By.CSS_SELECTOR, '[placeholder="請(qǐng)輸入專(zhuān)場(chǎng)標(biāo)題"]').send_keys("2024昆明土地推介專(zhuān)場(chǎng)")
driver.find_element(By.CSS_SELECTOR, ".el-tag > .el-select__tags-text")

index = 0
print(len(namelist))


def test(i):
    if  i > len(namelist)-1:
        over()
        return

    print(f'現(xiàn)在執(zhí)行到{i}')
    print(namelist[i])

    v = namelist[i]
    # 清空輸入框
    driver.find_element(By.CSS_SELECTOR, ".el-transfer-panel:nth-child(1) .el-input__inner").clear()
    time.sleep(1)
    # 將地塊名稱(chēng)寫(xiě)入輸入框
    driver.find_element(By.CSS_SELECTOR, ".el-transfer-panel:nth-child(1) .el-input__inner").send_keys(v)
    time.sleep(2)
    
    
    querResult = driver.find_element(By.CSS_SELECTOR,
                                     ".el-transfer > .el-transfer-panel:first-child > .el-transfer-panel__body > .is-filterable").is_displayed()  # 判斷元素是否是可見(jiàn)的
    print(querResult)
    # # 判斷是否有查詢(xún)結(jié)果,如果沒(méi)有查詢(xún)結(jié)果就存到一個(gè)數(shù)組中打印出來(lái)
    if querResult:
        # 選中查詢(xún)結(jié)果  .is-filterable > .el-checkbox:first-child
        driver.find_element(By.CSS_SELECTOR,
                            ".el-transfer > .el-transfer-panel:first-child > .el-transfer-panel__body > .is-filterable > .el-checkbox:first-child").click()
        time.sleep(1)
        # 點(diǎn)擊移動(dòng)按鈕將數(shù)據(jù)移動(dòng)到右邊的框中 .el-transfer__buttons > .el-button:nth-child(2)
        driver.find_element(By.CSS_SELECTOR, ".el-transfer__buttons > .el-button:nth-child(2)").click()
        time.sleep(1)
    else:
        noR.append(v)
        print(f"沒(méi)查到數(shù)據(jù)的地塊:{noR}")

    test(i + 1)

def over():
    print('結(jié)束')
    print(f'沒(méi)有找到地塊的數(shù)據(jù):{noR}')
    # .form-btn > .btn-preserve
    driver.find_element(By.CSS_SELECTOR, ".form-btn > .btn-preserve").click()
    time.sleep(2)
    # driver.find_element(By.CSS_SELECTOR, ".el-transfer-panel:nth-child(1) .el-input__inner").click()
    driver.close()


test(index)

現(xiàn)在解釋一下以上代碼,主要是使用地塊的名字主動(dòng)去平臺(tái)查詢(xún)數(shù)據(jù),容納后查詢(xún)出來(lái)的數(shù)據(jù)要自動(dòng)填充到對(duì)應(yīng)的框框內(nèi),使用的是遞歸的方式完成。 這里面要重點(diǎn)提幾點(diǎn):
1.首先你得去安裝 selenium WebDriver , 可以使用命令 : pip install selenium。然后導(dǎo)入使用

  1. 不得不說(shuō)一下這個(gè)方法 driver.implicitly_wait(200),簡(jiǎn)單的說(shuō),這是一個(gè)等待,傳入的是等待的時(shí)間是以秒為單位,等待的是什么呢? 等待的就是如果你的 driver.find_element() 方法里面的元素沒(méi)有出現(xiàn)在頁(yè)面,沒(méi)找到的時(shí)候,他就開(kāi)始等待,當(dāng)出現(xiàn)了代碼才會(huì)繼續(xù)執(zhí)行,但不是無(wú)休止的等待下去,只會(huì)等待你設(shè)置的時(shí)間,時(shí)間一到還是沒(méi)有出現(xiàn)你所要找的元素,就會(huì)報(bào)錯(cuò)。
  2. 可以看到我代碼里面基本都用了 time.sleep() 方法,是因?yàn)橛袝r(shí)候網(wǎng)絡(luò)不好,請(qǐng)求數(shù)據(jù)出不來(lái)的時(shí)候,就會(huì)出現(xiàn)找不要的數(shù)據(jù),所以為了保險(xiǎn)起見(jiàn),我都加了一個(gè) sleep 。

具體的Selenium 的入門(mén)教程,推介去看B站這個(gè)老師的課程:https://www.bilibili.com/video/BV1RZ4y147zD?p=1&vd_source=5bf7f57e54503e3b35b5bf5d5138b720

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容