在開發一個用selenium+chrome的爬蟲項目的時候,原先用點擊事件是能夠完成全部操做的,可是在deploy上服務器的時候,在點擊一個圖片的點擊事件中,click操做一直超時,大佬說用selenium的xpath定位一直會出問題,讓我用By.id或則By.name來定位,可是那個element沒有ID和name屬性啊。。css
而後我選擇了用cssSelector萬能神器來定位,這裏推薦一個偷懶的小竅門,若是是cssSelector和xpath語法寫很差的話,能夠利用chrome裏面自帶的小工具來獲取前端
可是用了CSSSelector仍是報的超時,click操做超時,我真的是很想吐槽一下,本地跑一直沒有問題,速度也很快。chrome
後來大佬就說,直接跑裏面的js吧。服務器
而後就是今天的主題了,利用chrome+selenium來跑js。工具
能夠看到那個click時間點擊的就是執行一個js方法,在selenium中是有方法能夠執行js腳本的。this
((JavascriptExecutor) this.driver).executeScript(js);
設計
直接傳進去js腳本就行。3d
我剛開始的作法是,直接調用他的方法。code
會發現是報這樣一個錯,clientY未定義。cdn
看了一下報錯,報的是這樣子的。
問了一下前端大佬,才發現是由於原先的設計是觸發點擊事件,而後獲取他鼠標懸停的狀態,而後來設定新的窗口的位置的。我都沒有進行點擊事件,那表明event都沒有,那clientY必然是獲取不到的。
知道起因後,我剛開始想的解決方法是,那就讓他獲取到鼠標點擊事件,讓他有這個event,可是想一想就以爲不行,若是都能點擊了,那以前就不會超時啦。而後就換了一種方案:重寫他的js方法,讓他的top屬性不經過clientY來獲取,而是給一個制定好的值,再從新調用這個方法。
在chrome裏面的console裏面先實驗:
也是第一次發現能夠在chrome裏面這樣子操做,chrome真的是神器,有不少工具真的很好用。
而後換成在後臺操做:
跑unitTest,結果無誤。
狗子走丟了,之後就剩我一我的了,一我的也要加油啊。