筆者是wordpress的忠實(shí)用戶(hù),之前也做過(guò)針對(duì)google和yahoo的seo,這些國(guó)外主流搜索引擎對(duì)wordpress貌似都相當(dāng)友好。但是筆者做秀萌網(wǎng)博客的時(shí)候發(fā)現(xiàn)了問(wèn)題:百度為什么無(wú)論如何都不會(huì)收錄我在wordpress里發(fā)表的文章呢?難道是因?yàn)?a href="http://vcdvsql.cn/link/" target="_blank">外鏈發(fā)的不夠多?如果不收錄我的文章,那何談轉(zhuǎn)載。在筆者經(jīng)過(guò)網(wǎng)上查閱資料,分析得出經(jīng)驗(yàn)和結(jié)論,總結(jié)了本篇文章。百度不收錄wordpress頁(yè)面的原因百度不收錄wordpress的頁(yè)面其實(shí)并不是絕對(duì)的,國(guó)內(nèi)有很多做的相當(dāng)不錯(cuò)的wordpress站,比如筆者很喜歡的谷奧。這些站本身和其他wordpress到底有什么樣的區(qū)別?仔細(xì)觀察過(guò)一些被收錄很好的網(wǎng)站,發(fā)現(xiàn)它們本身的標(biāo)簽云并沒(méi)有被很好的收錄,文章歸檔頁(yè)也大多沒(méi)有收錄。再去看這些站點(diǎn)的sitemap,其實(shí)并沒(méi)有什么特別之處。起初筆者也是越來(lái)越迷茫,到底是什么原因?qū)е铝怂鼈兛梢员豁樌珍洠拷?jīng)過(guò)多番試驗(yàn),答案終于水出石面。總結(jié)下來(lái)有以下幾條原因:經(jīng)常改變主題wordpress豐富的主題會(huì)讓不少站長(zhǎng)挑花了眼,但是兩三天一換主題卻是一個(gè)致命傷。不同主題大多文檔結(jié)構(gòu)是不一樣的,如果經(jīng)常改變主題,也就相當(dāng)于網(wǎng)站經(jīng)常改版。這樣一定會(huì)影響收錄情況的,最壞可能會(huì)被k站。所以使用wordpress做blog的站長(zhǎng)一定要注意,切忌勤換主題。解決方法也很簡(jiǎn)單,選擇主題一定一步到位,之后修改主題只需要二次開(kāi)發(fā)就好了,沒(méi)必要大動(dòng)干戈的時(shí)候就盡量少修改。復(fù)雜的標(biāo)簽云也許有人會(huì)問(wèn),標(biāo)簽云不是有利于搜索引擎的嗎?的確,好的標(biāo)簽云是增加網(wǎng)站內(nèi)部鏈接的很好的選擇。但是過(guò)度使用標(biāo)簽會(huì)造成不好的影響。尤其wordpress的標(biāo)簽功能十分強(qiáng)大,同時(shí)也十分復(fù)雜,這就給搜索引擎爬取頁(yè)面帶來(lái)了難度:爬蟲(chóng)無(wú)法權(quán)衡標(biāo)簽的權(quán)重。其實(shí)標(biāo)簽并不是分類(lèi),如果把標(biāo)簽當(dāng)作文檔歸類(lèi)去使用,那注定你網(wǎng)站的結(jié)構(gòu)不會(huì)太好。通常情況,一篇文章打1到3個(gè)標(biāo)簽是正常的,如果標(biāo)簽太多,反而會(huì)讓爬蟲(chóng)繞暈,不利于收錄。如果掌握不好度,可以將“標(biāo)簽云”的小插件刪除掉。過(guò)慢的反應(yīng)速度和動(dòng)態(tài)頁(yè)面過(guò)慢的反應(yīng)速度通常也是網(wǎng)站的硬傷。如果開(kāi)啟了緩存還好,沒(méi)有開(kāi)啟緩存功能的wordpress站可能需要很高的主機(jī)配置。開(kāi)啟很多插件的wordpress同時(shí)會(huì)對(duì)相應(yīng)速度產(chǎn)生影響。最好的方法,當(dāng)然是靜態(tài)化url。
成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)提供從項(xiàng)目策劃、軟件開(kāi)發(fā),軟件安全維護(hù)、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評(píng)估等整套的建站服務(wù),主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站建設(shè),重慶APP開(kāi)發(fā)以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。成都創(chuàng)新互聯(lián)公司深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
一、403 forbidden是什么意思?
403 Forbidden是HTTP協(xié)議中的一個(gè)狀態(tài)碼(Status Code)。可以簡(jiǎn)單的理解為沒(méi)有權(quán)限訪問(wèn)此站。該狀態(tài)表示服務(wù)器理解了本次請(qǐng)求但是拒絕執(zhí)行該任務(wù),該請(qǐng)求不該重發(fā)給服務(wù)器。在HTTP請(qǐng)求的方法不是“HEAD”,并且服務(wù)器想讓客戶(hù)端知道為什么沒(méi)有權(quán)限的情況下,服務(wù)器應(yīng)該在返回的信息中描述拒絕的理由。在服務(wù)器不想提供任何反饋信息的情況下,服務(wù)器可以用404 Not Found代替403 Forbidden。
二、403錯(cuò)誤代碼的分類(lèi)介紹
403.1
403.1錯(cuò)誤是由于"執(zhí)行"訪問(wèn)被禁止而造成的,若試圖從目錄中執(zhí)行CGI、ISAPI或其他可執(zhí)行程序,但該目錄不允許執(zhí)行程序時(shí)便會(huì)出現(xiàn)此種錯(cuò)誤。
403.2
403.2錯(cuò)誤是由于"讀取"訪問(wèn)被禁止而造成的。導(dǎo)致此錯(cuò)誤是由于沒(méi)有可用的默認(rèn)網(wǎng)頁(yè)并且沒(méi)有對(duì)目錄啟用目錄瀏覽,或者要顯示的HTML網(wǎng)頁(yè)所駐留的目錄僅標(biāo)記為"可執(zhí)行"或"腳本"權(quán)限。
403.3
403.3錯(cuò)誤是由于"寫(xiě)入"訪問(wèn)被禁止而造成的,當(dāng)試圖將文件上載到目錄或在目錄中修改文件,但該目錄不允許"寫(xiě)"訪問(wèn)時(shí)就會(huì)出現(xiàn)此種錯(cuò)誤。
403.4
403.4錯(cuò)誤是由于要求SSL而造成的,您必須在要查看的網(wǎng)頁(yè)的地址中使用"https"。
403.5
403.5錯(cuò)誤是由于要求使用128位加密算法的Web瀏覽器而造成的,如果您的瀏覽器不支持128位加密算法就會(huì)出現(xiàn)這個(gè)錯(cuò)誤,您可以連接微軟網(wǎng)站進(jìn)行瀏覽器升級(jí)。
403.6
403.6錯(cuò)誤是由于IP地址被拒絕而造成的。如果服務(wù)器中有不能訪問(wèn)該站點(diǎn)的IP地址列表,并且您使用的IP地址在該列表中時(shí)您就會(huì)返回這條錯(cuò)誤信息。
403.7
403.7錯(cuò)誤是因?yàn)橐罂蛻?hù)證書(shū),當(dāng)需要訪問(wèn)的資源要求瀏覽器擁有服務(wù)器能夠識(shí)別的安全套接字層(SSL) 客戶(hù)證書(shū)時(shí)會(huì)返回此種錯(cuò)誤。
403.8
403.8錯(cuò)誤是由于禁止站點(diǎn)訪問(wèn)而造成的,若服務(wù)器中有不能訪問(wèn)該站點(diǎn)的DNS名稱(chēng)列表,而您使用的DNS名稱(chēng)在列表中時(shí)就會(huì)返回此種信息。請(qǐng)注意區(qū)別403.6與403.8錯(cuò)誤。
403.9
403.9錯(cuò)誤是由于連接的用戶(hù)過(guò)多而造成的,由于Web服務(wù)器很忙,因通訊量過(guò)多而無(wú)法處理請(qǐng)求時(shí)便會(huì)返回這條錯(cuò)誤。
403.10
403.10錯(cuò)誤是由于無(wú)效配置而導(dǎo)致的錯(cuò)誤,當(dāng)您試圖從目錄中執(zhí)行CGI、ISAPI或其他可執(zhí)行程序,但該目錄不允許執(zhí)行程序時(shí)便會(huì)返回這條錯(cuò)誤。
403.11
403.11錯(cuò)誤是由于密碼更改而導(dǎo)致無(wú)權(quán)查看頁(yè)面。
403.12
403.12錯(cuò)誤是由于映射器拒絕訪問(wèn)而造成的。若要查看的網(wǎng)頁(yè)要求使用有效的客戶(hù)證書(shū),而您的客戶(hù)證書(shū)映射沒(méi)有權(quán)限訪問(wèn)該Web站點(diǎn)時(shí)就會(huì)返回映射器拒絕訪問(wèn)的錯(cuò)誤。
403.13
403.13錯(cuò)誤是由于需要查看的網(wǎng)頁(yè)要求使用有效的客戶(hù)證書(shū)而使用的客戶(hù)證書(shū)已經(jīng)被吊銷(xiāo),或者無(wú)法確定證書(shū)是否已吊銷(xiāo)造成的。
403.14
403.14錯(cuò)誤Web 服務(wù)器被配置為不列出此目錄的內(nèi)容,拒絕目錄列表。
403.15
403.15錯(cuò)誤是由于客戶(hù)訪問(wèn)許可過(guò)多而造成的,當(dāng)服務(wù)器超出其客戶(hù)訪問(wèn)許可限制時(shí)會(huì)返回此條錯(cuò)誤。
403.16
403.16錯(cuò)誤是由于客戶(hù)證書(shū)不可信或者無(wú)效而造成的。
403.17
403.17錯(cuò)誤是由于客戶(hù)證書(shū)已經(jīng)到期或者尚未生效而造成的。
三、導(dǎo)致403錯(cuò)誤的主要原因
1、你的IP被列入黑名單。
2、你在一定時(shí)間內(nèi)過(guò)多地訪問(wèn)此網(wǎng)站(一般是用采集程序),被防火墻拒絕訪問(wèn)了。
3、網(wǎng)站域名解析到了空間,但空間未綁定此域名。
4、你的網(wǎng)頁(yè)腳本文件在當(dāng)前目錄下沒(méi)有執(zhí)行權(quán)限。
5、在不允許寫(xiě)/創(chuàng)建文件的目錄中執(zhí)行了創(chuàng)建/寫(xiě)文件操作。
6、以http方式訪問(wèn)需要ssl連接的網(wǎng)址。
7、瀏覽器不支持SSL 128時(shí)訪問(wèn)SSL 128的連接。
8、在身份驗(yàn)證的過(guò)程中輸入了錯(cuò)誤的密碼。
9、DNS解析錯(cuò)誤,手動(dòng)更改DNS服務(wù)器地址。
10、連接的用戶(hù)過(guò)多,可以過(guò)后再試。
11、服務(wù)器繁忙,同一IP地址發(fā)送請(qǐng)求過(guò)多,遭到服務(wù)器智能屏蔽。
四、解決403 forbidden錯(cuò)誤的方法
1、重建dns緩存
對(duì)于一些常規(guī)的403 forbidden錯(cuò)誤,馬海祥建議大家首先要嘗試的就是重建dns緩存,在運(yùn)行中輸入cmd,然后輸入ipconfig /flushdns即可。如果不行的話,就需要在hosts文件里把主頁(yè)解析一下了。
2、修改文件夾安全屬性
用以下命令修改文件夾安全屬性
chcon -R -t httpd_user_content_t public_html/
所用命令解析:
ls -Z -d public_html/
#顯示文件/目錄的安全語(yǔ)境-Z, --context
Display security context so it fits on most displays. Displays only mode, user, group, security context and file name.-d, --directory
list directory entries instead of contents, and do not dereference symbolic links
chcon -R -t httpd_user_content_t public_html/
#修改文件/目錄的安全語(yǔ)境-R, --recursive
change files and directories recursively-t, --type
set type TYPE in the target security context
3、關(guān)于apache導(dǎo)致的403 forbidden錯(cuò)誤的解決辦法
打開(kāi)apache的配置文件httpd.conf,找到這段代碼:
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
有時(shí)候由于配置了php后,這里的“Deny from all”已經(jīng)拒絕了一切連接。把該行改成“allow from all”,修改后的代碼如下,問(wèn)題解決。
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
之所以會(huì)出現(xiàn)錯(cuò)誤,是因?yàn)榇蠖鄶?shù)的國(guó)外主機(jī)在配置Apache的時(shí)候啟用了mod_security,也就是開(kāi)啟了安全檢查,如果提交的信息中包含select , % , bin等關(guān)鍵字,Apache就會(huì)禁止,并給出403,404,500等錯(cuò)誤。
4、關(guān)于HawkHost空間出現(xiàn)403 Forbidden錯(cuò)誤的解決方法
有的時(shí)候在共享服務(wù)器上安裝了Mod security,當(dāng)網(wǎng)址包含有“%”號(hào)等其它敏感字符時(shí),就會(huì)被Mod security阻止,馬海祥博客曾經(jīng)也出現(xiàn)過(guò)此情況。
解決HawkHost 403 Forbidden 錯(cuò)誤的方法:
在.htaccess文件里添加如下代碼:
SecFilterEngine Off
SecFilterScanPOST Off
直接放在網(wǎng)站的根目錄或者程序運(yùn)行的目錄下。
5、關(guān)于WordPress導(dǎo)致的403 Forbidden錯(cuò)誤解決方法
對(duì)于一些使用WordPress管理程序搭建的博客來(lái)說(shuō),就需要修改.htaccess文件,在后面添加上如下內(nèi)容即可,其實(shí)就是disable mod_security
SecFilterEngine Off
SecFilterScanPOST Off
另外dedecms的可能還需要再加一條,以讓默認(rèn)訪問(wèn)的是index.html文件的DirectoryIndex index.html。
修改.htaccess文件,將文件上傳之后,再重新打開(kāi)之前出現(xiàn)403 Forbidden的URL就沒(méi)有再出現(xiàn)錯(cuò)誤,直接可以打開(kāi)了。
1、在做SEO的時(shí)候首先通過(guò)Google網(wǎng)站管理員工具提交Sitemap,它可以使網(wǎng)站內(nèi)容完全被收錄,當(dāng)然包括那些隱藏比較深的頁(yè)面。
2、優(yōu)化 title 頁(yè)標(biāo)題,不要把 Blog 名稱(chēng)顯示在文章標(biāo)題的前面,因?yàn)樵谒阉鹘Y(jié)果中,頁(yè)標(biāo)題會(huì)高亮顯示,把 Blog 名稱(chēng)放在前面,會(huì)導(dǎo)致因?yàn)殚L(zhǎng)度過(guò)長(zhǎng)而被隱藏,同時(shí)不利于訪問(wèn)者在第一時(shí)間關(guān)注到文章本身的標(biāo)題。
3、從SEO的角度來(lái)講robots.txt文件是一定要設(shè)置的,這是因?yàn)椋翰捎胷obots.txt文件可以屏蔽掉次要的、URL重寫(xiě)優(yōu)化前的鏈接,以及屏蔽一些沒(méi)有關(guān)鍵詞的頁(yè)面。robots.txt 文件必須放在網(wǎng)站的根目錄,能通過(guò) /robots.txt 可以成功訪問(wèn)到,則說(shuō)明本站的放置正確。如 robots.txt 文件放在子目錄,那么搜索引擎不能爬取到,也就不會(huì)起任何作用。
4、需要大量的反向鏈接,因?yàn)榇罅康逆溄又赶駼log 可以提高 PageRank,并且能讓 Blog 在搜索引結(jié)果中更靠前。
5、搜索引擎非常喜歡原創(chuàng)文章。如果在搜索結(jié)果中,文章排在第三頁(yè)后,那么也不會(huì)給 Blog 帶來(lái)多少實(shí)質(zhì)的影響了。文章內(nèi)容必須簡(jiǎn)潔有力,不要長(zhǎng)篇大論。
6、垃圾留言會(huì)影響 Blog 在搜索引擎中的表現(xiàn)。需要安裝一個(gè)自動(dòng)過(guò)濾垃圾留言評(píng)論的的插件,推薦使用 Akismet。
7、堅(jiān)持每天更新。
1
為什么會(huì)實(shí)行搶票機(jī)制?
?
其他所謂的搶票,根本原理就是幫你時(shí)時(shí)刻刻盯著12306而已。無(wú)論哪一家的搶票,最終都是要通過(guò).
2
有人知道搶票軟件的原理是什么嗎?
“購(gòu)票者提供個(gè)人信息,將被上傳至服務(wù)器數(shù)據(jù)庫(kù)。 一旦檢測(cè)到余票就迅速鎖定,并通過(guò)高速填寫(xiě)乘車(chē)人信息和自動(dòng)識(shí)別驗(yàn)證碼來(lái)?yè)屍?/p>
3
12306是搶票原理分析 - 多線程之間實(shí)現(xiàn)同步 - evanYang - 的博客...
2020年5月3日程序執(zhí)行的順序按照代碼的先后順序執(zhí)行。 一般來(lái)說(shuō)處理器為了提高程序運(yùn)行效率
4
python自動(dòng)搶票的原理
python自動(dòng)搶票的原理_利用Python代碼自動(dòng)搶火車(chē)票的原理以及代碼解析
weixin_39890629
原創(chuàng)
關(guān)注
1點(diǎn)贊·1024人閱讀
今年你不妨自己寫(xiě)一段代碼來(lái)?yè)尰丶业幕疖?chē)票,是不是很Cool。
準(zhǔn)備工具:
12306網(wǎng)站用戶(hù)名和密碼
chrome瀏覽器及下載chromedriver
下載Python代碼
代碼用的Python+Splinter開(kāi)發(fā),Splinter是一個(gè)使用Python開(kāi)發(fā)的開(kāi)源Web應(yīng)用測(cè)試工具,它可以幫你實(shí)現(xiàn)自動(dòng)瀏覽站點(diǎn)和與其進(jìn)行交互。Splinter執(zhí)行的時(shí)候會(huì)自動(dòng)打開(kāi)你指定的瀏覽器,訪問(wèn)指定的URL。然后你所開(kāi)發(fā)的模擬的任何行為,都會(huì)自動(dòng)完成,你只需要坐在電腦面前,像看電影一樣看著屏幕上各種動(dòng)作自動(dòng)完成然后收集結(jié)果即可。
了解原理:
找到相應(yīng)URL,找到控件模擬登錄、查詢(xún)、訂票操作。關(guān)鍵是找到控件名稱(chēng),難點(diǎn)是起始地不是直接輸入的頁(yè)面值,需要在cookie中查出。
12306查詢(xún)URL:
12306登錄URL:
我的12306URL:
購(gòu)票確認(rèn)URL:
Python代碼打開(kāi)URL,找到控件填充值:
找到用戶(hù)名密碼控件名
找到起始地控件名
確定起始地的值,方法Chrome瀏覽器中的“檢查”功能(按F12),Network---Cookies中找到:
cookie中起始地的值
拷貝起始地的cookie值,我把幾個(gè)常用的城市拷出來(lái),放到了字典中:
查詢(xún)車(chē)票代碼:
其實(shí),你只需要運(yùn)行代碼:
當(dāng)然,還需要手動(dòng)點(diǎn)一下的還是萬(wàn)惡的12306驗(yàn)證碼,搶到票后確認(rèn)支付就行啦。
搶票進(jìn)行中
搶票成功!
5
登錄
首頁(yè)
學(xué)習(xí)
實(shí)踐
活動(dòng)
專(zhuān)區(qū)
工具
TVP
返回騰訊云官網(wǎng)
阿黎逸陽(yáng)
111 篇文章
關(guān)注
100行代碼自動(dòng)買(mǎi)火車(chē)票——和你一起探索搶票軟件背后的原理
2021-10-08 15:32:42閱讀 6940
大家有沒(méi)有這種感覺(jué),一到國(guó)慶、春節(jié)這種長(zhǎng)假,搶火車(chē)票就非常困難?
各大互聯(lián)網(wǎng)公司都推出搶票服務(wù),只要加錢(qián)給服務(wù)費(fèi)就可以增加搶到票的幾率。
有些火車(chē)票代售網(wǎng)點(diǎn)和一些加速買(mǎi)票軟件,說(shuō)你只要給100元服務(wù)費(fèi)就可以?xún)?yōu)先幫忙搶到票。
本文和你一起探索搶票軟件背后的原理。
本文目錄
效果展示
代碼詳解
2.1 導(dǎo)入庫(kù)
2.2 確定好基本購(gòu)票信息
2.3 登錄12306
2.4 模擬滑動(dòng)滑塊
2.5 處理疫情特殊要求
2.6 點(diǎn)擊購(gòu)票并填寫(xiě)相關(guān)信息
2.7 鎖定車(chē)票
一、效果展示
在正式進(jìn)入代碼講解之前,先來(lái)看下本文的實(shí)現(xiàn)效果。
如果不是為了演示效果,直接在最后確定階段加一個(gè)延時(shí)點(diǎn)擊確定,應(yīng)該不到45秒可以鎖定一張票,只要在30分鐘之內(nèi)付款即可。
二、代碼詳解
本小節(jié)會(huì)詳細(xì)解鎖搶票軟件是如何模擬登錄網(wǎng)站,進(jìn)行自動(dòng)買(mǎi)票的。
為了更清晰地給大家展示,部分代碼沒(méi)有寫(xiě)成函數(shù),直接裸代碼運(yùn)行,讓需要買(mǎi)票的朋友可以自己應(yīng)用軟件進(jìn)行購(gòu)票。
1 導(dǎo)入庫(kù)
首先導(dǎo)入本文需要加載的庫(kù),如果你有些庫(kù)還沒(méi)有安裝,導(dǎo)致運(yùn)行代碼時(shí)報(bào)錯(cuò),可以在Anaconda Prompt中用pip方法安裝。
import json
import time
from captcha import *
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import wait
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
#導(dǎo)入庫(kù)
復(fù)制
2 確定好購(gòu)票基本信息
導(dǎo)入庫(kù)后,在python代碼中填寫(xiě)你購(gòu)票的基本信息。
purpose = 'ADULT' #購(gòu)買(mǎi)成人票,如果是學(xué)生票,需調(diào)整代碼
names = ['謝朝陽(yáng)'] #填寫(xiě)購(gòu)票人姓名
date = '2021-09-21' #填寫(xiě)購(gòu)票日期
start_station = '深圳' #購(gòu)票出發(fā)站
end_station = '長(zhǎng)沙南' #購(gòu)票目的站
password = '11234567xyz' #登錄12306的秘密
username ='xiezhaoyang122700' #登錄12306的賬號(hào)
trains = ['G1004', 'G80', 'G6028', 'G6182', 'G6016'] #你想買(mǎi)的班次
#填寫(xiě)基本信息
復(fù)制
本文預(yù)訂的是2021年9月21日從深圳到長(zhǎng)沙南的高鐵票,你可以根據(jù)自己的實(shí)際需要進(jìn)行調(diào)整。
由于有些班次的時(shí)間過(guò)早或過(guò)晚,買(mǎi)了也很不方便,所以可以在trains中挑選出你滿(mǎn)意的班次進(jìn)行購(gòu)票。
在這里需要提醒大家,我之前在嘗試代碼時(shí)碰到的坑,那就是時(shí)間中如果有個(gè)位數(shù)要在前面填0。
比如2021年9月2日,你在填寫(xiě)購(gòu)票日期date時(shí)要寫(xiě)成'2021-09-02',否則在運(yùn)行代碼時(shí)日期總是填不進(jìn)去。
3 登錄12306
確定好購(gòu)票的基本信息后,就可以應(yīng)用python模擬登錄12306了,代碼如下:
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
browser = webdriver.Chrome(options=options)
browser.maximize_window()
login_url = ''
#ticket_url = ''
browser.get(login_url)
time.sleep(0.5)
wait.WebDriverWait(browser, 5).until(EC.element_to_be_clickable((By.CLASS_NAME,'login-hd-account'))).click()
input_name = browser.find_element_by_id('J-userName')
input_pd = browser.find_element_by_id('J-password')
input_name.send_keys(username)
input_pd.send_keys(password)
login = browser.find_element_by_id('J-login')
login.click()
#登錄12306
復(fù)制
整體思路是:
應(yīng)用python模擬調(diào)用google瀏覽器;
輸入12306網(wǎng)址;
等網(wǎng)頁(yè)加載完全后點(diǎn)擊賬戶(hù)密碼登錄;
找到賬號(hào)密碼的id,把賬戶(hù)密碼信息填充進(jìn)去;
找到登錄id,模擬點(diǎn)擊登錄按鈕。
在這一小節(jié)中要注意兩個(gè)點(diǎn)。一是要在python安裝目錄中放和google版本匹配的chromedriver,供python調(diào)用。
二是要學(xué)會(huì)找填寫(xiě)賬戶(hù)密碼信息的id。
首先,在google瀏覽器中輸入12306登錄網(wǎng)址:。
接著點(diǎn)擊賬戶(hù)密碼登錄,會(huì)出現(xiàn)如下界面。
然后點(diǎn)擊紅框中的三個(gè)點(diǎn),找到更多工具,點(diǎn)擊開(kāi)發(fā)者工具,會(huì)出現(xiàn)如下界面。
點(diǎn)擊紅框中的箭頭,把鼠標(biāo)移動(dòng)到賬戶(hù)框上去,就會(huì)出現(xiàn)如下界面:
undefined
右邊變灰的框里就會(huì)出現(xiàn)對(duì)應(yīng)的id,點(diǎn)擊賬號(hào)框,再把鼠標(biāo)移動(dòng)到右邊變灰的字符上去,點(diǎn)擊右鍵,會(huì)出現(xiàn)copy element的選項(xiàng),復(fù)制下來(lái)即可。
input type="text" class="input" id="J-userName" placeholder="用戶(hù)名/郵箱/手機(jī)號(hào)" style="height: 44px; line-height: 44px; outline: black 0px;" aria-label="請(qǐng)輸入用戶(hù)名/郵箱/手機(jī)號(hào)" title="請(qǐng)輸入用戶(hù)名/郵箱/手機(jī)號(hào)"
復(fù)制
發(fā)現(xiàn)了嗎?源代碼input_name中要填寫(xiě)的browser.find_element_by_id('J-userName')內(nèi)容,即為id="J-userName"中的信息。
4 模擬滑動(dòng)滑塊
輸入完用戶(hù)名和密碼,點(diǎn)擊立即登錄后,會(huì)出現(xiàn)如下滑塊驗(yàn)證要求。
運(yùn)行如下代碼即可拖動(dòng)滑塊進(jìn)行驗(yàn)證。
browser.implicitly_wait(5)
print('=====開(kāi)始處理滑動(dòng)驗(yàn)證碼=====')
track = [300, 400, 500]
for i in track:
try:
btn = browser.find_element_by_xpath('//*[@id="nc_1__scale_text"]/span')
ActionChains(browser).drag_and_drop_by_offset(btn,i,0).perform()
except:
time.sleep(2)
#拉動(dòng)滑塊驗(yàn)證
復(fù)制
其中,browser.implicitly_wait(5)表示隱性等待5秒,track中放的是滑塊拉動(dòng)的距離。
5 處理疫情特殊要求
完成滑塊驗(yàn)證要求后,會(huì)出現(xiàn)如下疫情特殊要求提示:
用如下代碼點(diǎn)擊確認(rèn)即可。
browser.implicitly_wait(5)
browser.find_element_by_xpath('/html/body/div[5]/div[2]/div[3]/a').click()
time.sleep(2)
#疫情特殊要求
復(fù)制
browser.find_element_by_xpath和id的區(qū)別是,在右鍵復(fù)制時(shí)要copy XPath或copy full XPath。
6 點(diǎn)擊購(gòu)票并填寫(xiě)出發(fā)地、目的地、出發(fā)時(shí)間
接下來(lái)是選擇買(mǎi)票,并將出發(fā)地、目的地、出發(fā)時(shí)間等信息填寫(xiě)進(jìn)去。
browser.find_element_by_xpath('//*[@id="J-chepiao"]/a').click()
browser.find_element_by_xpath('//*[@id="megamenu-3"]/div[1]/ul/li[1]/a').click()
browser.find_element_by_xpath('//*[@id="qd_closeDefaultWarningWindowDialog_id"]').click()
#選擇買(mǎi)票
def input_info():
print('=====開(kāi)始買(mǎi)票=====')
from_station = browser.find_element_by_xpath('//*[@id="fromStationText"]')
from_station.send_keys(Keys.ENTER)
from_station.send_keys(Keys.CONTROL, 'a')
from_station.send_keys(start_station, Keys.ENTER)
browser.implicitly_wait(5)
to_station = browser.find_element_by_xpath('//*[@id="toStationText"]')
to_station.send_keys(Keys.ENTER)
to_station.send_keys(Keys.CONTROL, 'a')
to_station.send_keys(end_station, Keys.ENTER)
browser.implicitly_wait(5)
start_date = browser.find_element_by_xpath('//*[@id="train_date"]')
start_date.send_keys(Keys.ENTER)
start_date.send_keys(Keys.CONTROL, 'a')
start_date.send_keys(Keys.CONTROL, 'x')
start_date.send_keys(date, Keys.ENTER)
browser.implicitly_wait(5)
wait.WebDriverWait(browser, 3).until(EC.element_to_be_clickable((By.ID,'query_ticket'))).click()
input_info()
input_info()
#將出發(fā)地、目的地、出發(fā)日期填進(jìn)去
復(fù)制
得到結(jié)果如下:
這里需要注意的是我調(diào)用了兩遍input_info函數(shù),因?yàn)?2306可能采取了一些反爬措施,一遍輸入進(jìn)去后查不出東西,顯示為灰色。
7 鎖定車(chē)票
最后是依次查找trains中的車(chē)次是否有票,有的話點(diǎn)擊購(gòu)買(mǎi)鎖定車(chē)票。
trList = browser.find_elements_by_xpath(".//tbody[@id='queryLeftTable']/tr[not(@datatran)]")
for tr in trList:
trainNum = tr.find_element_by_class_name("number").text
if trainNum in trains:
leftTicket = tr.find_element_by_xpath(".//td[4]").text
print('leftTicket', leftTicket)
if leftTicket == '有' or leftTicket.isdigit():
orderBtn = tr.find_element_by_class_name("btn72")
orderBtn.click()
browser.implicitly_wait(5)
passengerLabels = browser.find_elements_by_xpath(".//ul[@id='normal_passenger_id']/li/label")
for passengerLabel in passengerLabels:
name = passengerLabel.text
if name in names:
passengerLabel.click()
browser.implicitly_wait(20)
# 獲取提交按鈕
submitBtn = browser.find_element_by_id("submitOrder_id")
submitBtn.click()
browser.implicitly_wait(20)
confirmBtn = browser.find_element_by_id("qr_submit_id")
confirmBtn.click()
time.sleep(2)
browser.implicitly_wait(20)
confirmBtn = browser.find_element_by_id("qr_submit_id")
confirmBtn.click()
break
#依次查找trains中的車(chē)次是否有票,有的話點(diǎn)擊購(gòu)買(mǎi)
復(fù)制
所以,如果你有特別心儀的車(chē)次,可以在trains中放在最前面,依次填寫(xiě)覺(jué)得還行的車(chē)次。
至此,應(yīng)用python解鎖搶票軟件背后的原理已講解完畢,感興趣的朋友可以自己跟著本文實(shí)現(xiàn)一遍。
12306不定期會(huì)更新買(mǎi)票界面,所以過(guò)一段時(shí)間可能之前的代碼就要進(jìn)行一些調(diào)整,需要自己弄清里面的原理,才可以以不變應(yīng)萬(wàn)變。
本文的代碼沒(méi)有進(jìn)行高級(jí)的封裝,只為大家能更清楚地了解每一步,能在搶票高峰期買(mǎi)到自己心儀的票。
也寫(xiě)得很基礎(chǔ),沒(méi)有進(jìn)一步的調(diào)優(yōu)縮短時(shí)效,感興趣的朋友可以自行研究,如有任何疑問(wèn)可以跟我溝通。
6
搶票軟件原理 - Python實(shí)戰(zhàn)案例教學(xué)(視頻講解) 12306...
?
2020年12月7日python有很多方法去實(shí)現(xiàn)搶票,其基本原理,就是讓程序自動(dòng)模擬人去操作12306網(wǎng)站
7
為什么會(huì)實(shí)行搶票機(jī)制?
?
其他所謂的搶票,根本原理就是幫你時(shí)時(shí)刻刻盯著12306而已。無(wú)論哪一家的搶票,最終都是要通過(guò).
分享標(biāo)題:wordpress反爬 網(wǎng)站反爬
本文地址:http://vcdvsql.cn/article10/ddoiego.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、電子商務(wù)、用戶(hù)體驗(yàn)、云服務(wù)器、軟件開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)