停留了幾天,重新打開robot灿里,寫好了腳本关炼,跑了一遍,結(jié)果發(fā)現(xiàn)瀏覽器打不開了匣吊;于是郁悶了一會儒拂,根本就沒動過這套環(huán)境寸潦,突然就不行了,瀏覽器沒有更新版本社痛,webdriver也沒動過见转;通過查看日志,報的是Can not connect to the Service chromedriver褥影,這個錯誤之前從來沒遇到過池户,通過查詢后得知答案,是因為這幾天在學(xué)習(xí)java動了hosts文件凡怎,異常連不上chromedriver校焦,重新配置了127.0.0.1 localhost后恢復(fù)正常。
本來已經(jīng)解決問題统倒,已經(jīng)沒什么事情了的寨典,但是就是搞不懂,因為hosts文件默認就是localhost指向127.0.0.1的房匆,根本不需要hosts文件做任何改變才對耸成。
第一步:ping localhost
發(fā)現(xiàn)打印的是來自::1的回復(fù),為什么不是127.0.0.1呢浴鸿?于是再次去看hosts文件井氢,發(fā)現(xiàn)::1 localhost之前的注釋不知道什么時候被我去掉了,于是乎我又加上了注釋符岳链,再次運行花竞,腳本正常運行,問題解決掸哑。
注:默認本來兩句都是注釋的约急,我不知道什么時候手賤去掉了注釋符,再次加上后恢復(fù)原樣苗分,如下:
#127.0.0.1 localhost
#::1 localhost
第二步:再ping localhost
發(fā)現(xiàn)打印的還是來自::1的回復(fù)厌蔽,但是我明明把::1 localhost與127.0.0.1 localhost兩行都注釋了摔癣。結(jié)果發(fā)現(xiàn),必須127.0.0.1 localhost不能注釋,這樣才沒問題,于是乎就郁悶啦薇缅。
第三步:通過查詢泳桦,原來兩個都注釋的情況下,ipv6解析優(yōu)先級高于ipv4浮毯,我們現(xiàn)在普遍用的都是ipv4债蓝,而::1就是ipv6解析localhost的結(jié)果饰迹,所以目的很明確,就是修改優(yōu)先級
如下步驟:
(1)使用管理員打開cmd命令窗口
(2)輸出netsh interface ipv6 show prefixpolicies赠制,查看ipv6、ipv4的解析優(yōu)先級厘唾,如下圖:
ipv6(::/0)的優(yōu)先級比ipv4(::ffff:0:0/96趟大、::/96)優(yōu)先級高罕伯,標簽數(shù)字表示優(yōu)先級追他,0最大懈糯。
所以這里就很明顯的說明問題了,兩個都注釋的情況下屿储,會指向解析成::1,兩個同時都不注釋的情況下祖屏,也會解析成::1,沒辦法優(yōu)先級高就是牛逼期丰。
(3)所以解決辦法就有兩個,一就是注釋::1 localhost,把127.0.0.1 localhost不注釋,二就是修改優(yōu)先級
(4)第一就不說了舞蔽,這里說說修改優(yōu)先級,依此執(zhí)行下面命令修改
netsh int ipv6 set prefix ::/96 50 0
netsh int ipv6 set prefix ::ffff:0:0/96 40 1
netsh int ipv6 set prefix 2002::/16 35 2
netsh int ipv6 set prefix 2001::/32 30 3
netsh int ipv6 set prefix ::1/128 10 4
netsh int ipv6 set prefix ::/0 5 5
(5)修改成功后混槐,再來試試,兩個同時注釋或同時不注釋,都會是來自127.0.0.1的回復(fù)坑质,當(dāng)然如果是注釋其一稼跳,則解釋成不注釋的
總結(jié):這樣就問題很明顯了,就是因為去掉注釋后吃沪,localhost指向了::1汤善,所以導(dǎo)致了webdriver發(fā)送請求到chrome失敗了,這就應(yīng)了前面那句票彪,Can not connect to the Service chromedriver红淡,意思就是連接不到chromedriver服務(wù)。忙完后降铸,我再整理一份webdriver的請求原理在旱,應(yīng)該就能更清晰明白了。還有讓我郁悶的是垮耳,我在win10颈渊、2012上試,就算我不注釋::1 localhost终佛,優(yōu)先級也更高俊嗽,一樣可以啟動成功,腳本正常跑铃彰,而我在win7上就能發(fā)現(xiàn)問題绍豁,我也是醉了,無能為力啦牙捉,只針對win7來說啊竹揍,其他系統(tǒng)我不敢保證啦敬飒。