国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

關(guān)于python+selenium+requests在服務(wù)器端開發(fā)多線程并發(fā)程序踩過的一些坑

這篇具有很好參考價(jià)值的文章主要介紹了關(guān)于python+selenium+requests在服務(wù)器端開發(fā)多線程并發(fā)程序踩過的一些坑。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

最近因?yàn)橐粋€(gè)需求,著手開發(fā)一款使用selenium+requests進(jìn)行多線程的測試工具,當(dāng)然還是基于相對(duì)熟悉的python來開發(fā)。由于很久沒寫了,就有很多道理我都懂,一試就出錯(cuò)的問題,前前后后折騰了幾天總算是開發(fā)完了,這里就把期間遇到的問題做一個(gè)記錄,希望可以幫助到有同樣困惑的同學(xué)。

一、服務(wù)器端環(huán)境配置

1. Ubuntu 20.04配置安裝python 3.10并修復(fù)pip

這個(gè)其實(shí)內(nèi)容不是很難,但無奈網(wǎng)上教程抄來抄去,沒有一個(gè)真正講清楚的,在參考了幾個(gè)教程以及實(shí)際測試后,整理操作如下:
目前ubuntu 20.04默認(rèn)的python版本是3.8,所以我們需要先給系統(tǒng)安裝3.10,然后再設(shè)置默認(rèn)python并修復(fù)對(duì)應(yīng)的pip,這里參考了這篇文章:在Ubuntu20.04上安裝Python3.10以及pip,為了方便我就把命令都直接貼出來,經(jīng)過實(shí)際測試是沒有問題的。

# 這里的命令默認(rèn)是root權(quán)限,如果不是請(qǐng)加上sudo運(yùn)行。

# 添加源
apt install software-properties-common
add-apt-repository ppa:deadsnakes/ppa
apt update

# 安裝 
apt install python3.10

# 檢查目前系統(tǒng)中的python版本,如果你的系統(tǒng)中默認(rèn)是python3.9或者其他版本,參照替換這里的3.8即可。
ls -l /usr/bin/python*

# 設(shè)置默認(rèn)python版本,路徑可以根據(jù)實(shí)際情況替換,通常不會(huì)變,特別要注意末尾的1和2兩個(gè)數(shù)字別漏了。
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2
update-alternatives --config python3
# 這個(gè)時(shí)候在終端中運(yùn)行python3就可以看到已經(jīng)切換到了python3.10,如果你想直接使用`python`,可以自行查詢?nèi)绾瓮ㄟ^設(shè)置alias別名來給命令改名,網(wǎng)上教程很多。

# 此時(shí)pip還不是3.10對(duì)應(yīng)的版本,需要進(jìn)行安裝。
apt install python3.10-distutils
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py
python3 get-pip.py --user
# 然后檢查是否安裝成功
pip3 -V
#顯示“pip 22.1 from /usr/local/lib/python3.10/dist-packages/pip (python 3.10)”就是可以了。

# 20230304更新:
# 如果出現(xiàn)pip功能異常或者告警的操作,可以按照提示把新版的pip路徑加到path里面去:
echo 'export PATH=/home/.../bin:$PATH' >>~/.bashrc
source ~/.bashrc
# 這里的...是你自己的實(shí)際路徑,bashrc也是看你的系統(tǒng)用的是什么終端。

2. ubuntu 20.04安裝chrome瀏覽器和webdriver

使用selenium需要使用和瀏覽器對(duì)應(yīng)版本的webdriver,這里我們使用chrome。

# 下載安裝chrome瀏覽器
apt update
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
apt install ./google-chrome-stable_current_amd64.deb
# 如果是蘋果M系列芯片的虛擬機(jī),可以使用以下替代
sudo apt install chromium-browser

# 查看chrome瀏覽器版本,比如這里是“Google Chrome 101.0.4951.64”
google-chrome -version

下載chromedriver,官方目錄鏈接chromedriver

二 、關(guān)于selenium的一些啟動(dòng)參數(shù)的說明

1. 無窗口模式

options.add_argument('--headless')

2. 隱身模式

options.add_argument("--incognito")

3. 無沙箱模式

# 這個(gè)是當(dāng)出現(xiàn)瀏覽器始終卡在“data:,”的時(shí)候使用
options.add_argument("--incognito")

4. 頁面加載策略

# 當(dāng)瀏覽器打開是,默認(rèn)是阻塞的,即需要等待頁面內(nèi)容加載完成,包括DOM、js、css、圖片等等。driver提供了三種加載策略,none、eager、normal。其中eager是只加載完DOM。
options.page_load_strategy = 'eager'

5. 忽略證書不可信的

# 有時(shí)候遇上https證書為不可信的時(shí)候,可以忽略證書的安全檢查。
options.add_argument('--ignore-certificate-errors')

6. 關(guān)于加載等待

# selenium的啟動(dòng)機(jī)制是這樣的,我們可以在打開頁面前設(shè)置等待頁面加載的時(shí)間
# 第一步配置啟動(dòng)參數(shù)
options.add_argument('xxxxxxxx')
# 第二步啟動(dòng)瀏覽器
driver = webdriver.Chrome(chrome_options=options, executable_path=chrome_driver)
# 第三步設(shè)置等待時(shí)間,單位秒
driver.set_page_load_timeout(25)
# 第四步打開url
driver.get("http://xxxxxxxxxxxxxx")
# 這是如果頁面在25秒內(nèi)沒有加載完策略指定的內(nèi)容,就會(huì)報(bào)錯(cuò)timeout,所以別忘了加上try...except...

7. 當(dāng)打開頁面遇上alert框

# 類似401認(rèn)證那種或者其他頁面默認(rèn)彈出來的alert框,需要跳過的話,可以強(qiáng)行確認(rèn),不存在就跳過
try:
	driver.switch_to.alert.accept()
except:
	pass

8. 關(guān)于selenium使用http還是https

# selenium有點(diǎn)比較麻煩就是你需要自己確定是http還是https,可以用requests來判斷,我用了一個(gè)簡單粗暴的方法
for protocolType in ["http://", "https://"]*3:
	driver.get(protocolType + url.strip())
# 兩種協(xié)議各試3遍

9. 關(guān)于判斷網(wǎng)頁是否打開

# 首先這里是用seleniunm打開大量網(wǎng)站,所以沒法使用特定元素來判斷,網(wǎng)上有些教程是用這樣的方法,思路是可以打開就是title,但是實(shí)際上不管能不能打開都有title,打不開的時(shí)候默認(rèn)title就是url。
driver.title

這里我用了一個(gè)判斷的辦法就是,在加載頁面前設(shè)置一個(gè)啟動(dòng)時(shí)間,結(jié)束設(shè)置一個(gè)結(jié)束時(shí)間,如果有標(biāo)題或者是加載時(shí)間在設(shè)置的加載超時(shí)時(shí)間內(nèi),就算是可以打開,雖然不是很嚴(yán)謹(jǐn),但是誤差相對(duì)來說小很多,附上簡單邏輯代碼供參考。

for protocolType in ["http://", "https://"]*3:
	start_time = datetime.datetime.now().timestamp()  # 瀏覽器啟動(dòng)時(shí)間
    try:
	    driver.get(protocolType + url.strip())
        try:
        	driver.switch_to.alert.accept()
        except:
            pass
        end_time = datetime.datetime.now().timestamp()  # 網(wǎng)頁加載完成時(shí)間
        if driver.title or end_time - start_time < 23:  # 有標(biāo)題或者小于23秒都算可以打開
            print("打開成功")
            break
        else:
            print("打開失敗")
except Exception as e:
        print("打開失敗")
        time.sleep(2)
driver.quit()

三、關(guān)于測試的時(shí)候到底是http還是https

在測試過程中無論是requests還是selenium都面臨著同一個(gè)問題,就是如何判斷網(wǎng)站使用的是http還是https,在實(shí)際開發(fā)過程中,幾乎沒有找到一種通用方法可以百分百覆蓋的成功判斷并打開所有網(wǎng)站,最后我用的策略就是,把所有的情況都試一遍。然后做一個(gè)計(jì)數(shù)器,成功打開加一,否則不加,最后計(jì)數(shù)不為0即為可以打開,雖然看起來有些啰嗦,但是在網(wǎng)絡(luò)環(huán)境穩(wěn)定的情況下效果還不錯(cuò)。文章來源地址http://www.zghlxwxcb.cn/news/detail-489930.html

# 簡單代碼邏輯
requests_method = [request_method.http_head,request_method.https_head,request_method.http_get, request_method.https_get] 


success_hit = 0
fail_hit = 0
if r.status_code in success_code:
	success_hit += 1
elif r.status_code in fail_code:
	fail_hit += 1

到了這里,關(guān)于關(guān)于python+selenium+requests在服務(wù)器端開發(fā)多線程并發(fā)程序踩過的一些坑的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 華為云云耀云服務(wù)器L實(shí)例評(píng)測|Python Selenium加Chrome Driver構(gòu)建UI自動(dòng)化測試實(shí)踐

    華為云云耀云服務(wù)器L實(shí)例評(píng)測|Python Selenium加Chrome Driver構(gòu)建UI自動(dòng)化測試實(shí)踐

    ??作者簡介,黑夜開發(fā)者,CSDN領(lǐng)軍人物,全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者?,CSDN博客專家,阿里云社區(qū)專家博主,2023年6月CSDN上海賽道top4。 ??數(shù)年電商行業(yè)從業(yè)經(jīng)驗(yàn), AWS/阿里云資深使用用戶 ,歷任核心研發(fā)工程師,項(xiàng)目技術(shù)負(fù)責(zé)人。 ??歡迎 ??點(diǎn)贊?評(píng)論?收藏 隨著云計(jì)算時(shí)代

    2024年02月08日
    瀏覽(22)
  • 【W(wǎng)eb開發(fā)】Python實(shí)現(xiàn)Web服務(wù)器(Sanic)

    【W(wǎng)eb開發(fā)】Python實(shí)現(xiàn)Web服務(wù)器(Sanic)

    ??基于Python的Web服務(wù)器系列相關(guān)文章編寫如下??: ??【W(wǎng)eb開發(fā)】Python實(shí)現(xiàn)Web服務(wù)器(Flask快速入門)?? ??【W(wǎng)eb開發(fā)】Python實(shí)現(xiàn)Web服務(wù)器(Flask案例測試)?? ??【W(wǎng)eb開發(fā)】Python實(shí)現(xiàn)Web服務(wù)器(Flask部署上線)?? ??【W(wǎng)eb開發(fā)】Python實(shí)現(xiàn)Web服務(wù)器(Tornado入門)?? ??【W(wǎng)eb開

    2024年02月06日
    瀏覽(21)
  • 6. Python使用Asyncio開發(fā)TCP服務(wù)器簡單案例

    1. 說明 在Python中開發(fā)TCP/IP服務(wù)器有兩種方式,一種使用Socket,需要在py文件中引入對(duì)應(yīng)的socket包,這種方式只能執(zhí)行單項(xiàng)任務(wù);另一種方式使用Asyncio異步編程,可以一次創(chuàng)建多個(gè)服務(wù)器執(zhí)行不同的任務(wù)。 2. 接口說明 3. 簡單案例 創(chuàng)建一個(gè)tcp服務(wù)器,并實(shí)現(xiàn)數(shù)據(jù)的接受和發(fā)送

    2024年03月11日
    瀏覽(28)
  • C# 通過 HttpWebRequest發(fā)送數(shù)據(jù)以及服務(wù)器通過Request請(qǐng)求獲取數(shù)據(jù)

    C# 通過 HttpWebRequest發(fā)送數(shù)據(jù)以及服務(wù)器通過Request請(qǐng)求獲取數(shù)據(jù)

    C#中HttpWebRequest的用法詳解 可參考: C#中HttpWebRequest的用法詳解 C# HttpWebRequest詳解 C# 服務(wù)器通過Request獲取參數(shù) 可參考: C# WebService 接口 通過Request請(qǐng)求獲取json參數(shù) 1、后臺(tái)程序發(fā)送HTTP請(qǐng)求的Class,服務(wù)器端也要添加該類 2、服務(wù)端返回HTTP請(qǐng)求的數(shù)據(jù)class,客戶端也要有 1、后臺(tái)

    2024年02月06日
    瀏覽(21)
  • HTTP Header定制,客戶端使用Request,服務(wù)器端使用Response

    HTTP Header定制,客戶端使用Request,服務(wù)器端使用Response

    ?在服務(wù)器端通過request.getHeaders()是無效的,只能使用response.getHeaders()。 ?

    2024年02月16日
    瀏覽(29)
  • python web 開發(fā)與 Node.js + Express 創(chuàng)建web服務(wù)器入門

    目錄 1.?Node.js + Express 框架簡介 2??Node.js + Express 和 Python?創(chuàng)建web服務(wù)器的對(duì)比 3 使用 Node.js + Express 創(chuàng)建web服務(wù)器示例 3.1?Node.js + Express 下載安裝 3.2 使用Node.js + Express 創(chuàng)建 web服務(wù)器流程 ????????Node.js + Express 是一種常用于構(gòu)建 Web 應(yīng)用程序的開發(fā)堆棧,其中 Node.js 是運(yùn)行

    2024年02月10日
    瀏覽(29)
  • 關(guān)于服務(wù)器部署流程

    1. 服務(wù)器購買 國內(nèi)服務(wù)器: 阿里云 ECS(Elastic Compute Service),騰訊云 CVM(Cloud Virtual Machine) 等 國外服務(wù)器: 日本?Vultr, 美國 Linode, 谷歌云,微軟 Azure,亞馬遜 AWS 等 這一步需要?jiǎng)?chuàng)建好服務(wù)器實(shí)例,分配好外網(wǎng) IP 地址。 2. 域名購買 國內(nèi): 萬網(wǎng)(阿里)、騰訊等 國外: Godaddy

    2024年02月04日
    瀏覽(19)
  • 【超詳細(xì)!超多圖!】【代碼管理】Python微信公眾號(hào)開發(fā)(3)- 服務(wù)器代碼上傳Github

    【超詳細(xì)!超多圖!】【代碼管理】Python微信公眾號(hào)開發(fā)(3)- 服務(wù)器代碼上傳Github

    前面的文章我們搭建了微信公眾號(hào)開發(fā)的服務(wù)器,寫了一點(diǎn)代碼。后面肯定會(huì)對(duì)代碼不斷的完善和迭代,那怎樣維護(hù)這些代碼呢? 可以通過GitHub進(jìn)行維護(hù)和版本管理。 本文主要帶你從0開始構(gòu)建起服務(wù)器和GitHub倉庫之間的聯(lián)系。 本文假設(shè)你已經(jīng)略懂基本的 git 指令: git init

    2024年02月02日
    瀏覽(28)
  • Python IDE Pycharm服務(wù)器配置方法并結(jié)合內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)遠(yuǎn)程開發(fā)

    Python IDE Pycharm服務(wù)器配置方法并結(jié)合內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)遠(yuǎn)程開發(fā)

    本文主要介紹如何使用Pycharm進(jìn)行遠(yuǎn)程開發(fā),并實(shí)現(xiàn)在家遠(yuǎn)程與公司服務(wù)器資源同步。 新版本 Jetbrains 系列開發(fā)IDE( IntelliJ IDEA , PyCharm , GoLand )等都支持遠(yuǎn)程使用服務(wù)器編譯,并且可以 通過SFTP同步本地與服務(wù)器項(xiàng)目代碼 。 這樣做的好處是**我們只要連接上服務(wù)器就能開始

    2024年02月04日
    瀏覽(42)
  • liunx服務(wù)器使用selenium

    liunx服務(wù)器使用selenium

    最近在本地windows系統(tǒng)(下面簡稱本地)用selenium寫了一個(gè)自動(dòng)化爬蟲,放到我liunx服務(wù)器(下面簡稱服務(wù)器)上面運(yùn)行報(bào)錯(cuò),記錄處理流程 一開始以為和本地一樣,下好chrome瀏覽器和驅(qū)動(dòng)就可以直接運(yùn)行了(太天真了~) 1、下載chrome 查看chrome版本安裝對(duì)應(yīng)版本chromedriver 我的

    2024年02月11日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包