selenium.common.exceptions.JavascriptException: Message: javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite.


1.這個項目是滑塊缺口驗證碼,第一頁點擊滑塊正常執行通過,第二頁報錯。

 

 

 

 

 

 perform無法執行,網上找了很多辦法,如下:

1.升級瀏覽器,本來就是權森版本

2.升級驅動,本來就是權森版本

3.升級selenium從3.1到3.4版本,說實話,驚呆我了,3.4特么的沒有pause這個方法,手動滑稽~,沒有這個方法,驗證碼也過不去,升級也沒用

4.使用JS執行按鈕點擊操作,的確是可以,但是我不要點擊,我要左鍵點擊保持不釋放,手動滑稽~

5.反正各種亂七八糟的方法都試過了,一團糟

下面說下自己嘗試的方法和思路:

1.xpathhelper

 

 

 一直檢查頁面跳轉或者html元素變動的情況下是否持續能獲取到需要的元素,其實可以長時間獲取到,說明xpath是沒問題的哈

2.查看頁面html變化的規律,審查代碼邏輯是否有失效的地方

3.在頁面執行某些操作后,打印頁面源碼或者元素信息查看是否有效定位元素

 

 

 4.如果還是不確定,還有幾個辦法

F12 elements界面

 

 

 F12 Console界面

 

 

$x('xpath表達式'),箭頭的位置可以看到這個元素是唯一的

元素獲取都沒問題的話,一起來看看這個錯誤是什么意思

 

 

 perform是

from selenium.webdriver import ActionChains

這個類執行的,官方的解釋如下:

 

 

 

 

 

 再結合這個錯誤提示,大概意思就是ActionChains會產生類似於一個列表一樣的東西,后面鼠標的操作都會按順序提交到這個列表里,

然后交由perform()一次直接執行,但是現在ActionChains中出現了兩個相同的操作,或者是同一個步驟出現了兩次,那么在第一個序列的操作

執行完成之后,將此列表清空,上面的問題就可以處理掉了。

恰好在國外的歐ver浮lower上看到一個方法:

#action_chains.py文件中85行函數修改如下
"""
Clears actions that are already stored locally and on the remote end
"""
if self._driver.w3c:
    self.w3c_actions.clear_actions()
    for device in self.w3c_actions.devices:
        device.clear_actions()
self._actions
= []

簡單來說思路和上面說的一樣,看到這個注釋,突發奇想,如果ActionChains本身沒有進行清空處理,

那么在perform()執行之后再重申下清空掉之前的操作不就可以了嗎

slider = self.browser.find_element_by_xpath("/html/body/div[last()]/div[2]/div[2]/div[2]/div[2]")
# if slider.is_displayed():
self.action_chains.click_and_hold(slider)
self.action_chains.pause(0.6)
self.action_chains.move_by_offset(xoffset=xset, yoffset=0)
self.action_chains.pause(0.9)
self.action_chains.release()
self.action_chains.perform()
# 執行鼠標所有的操作之后,將ActionChains重置
self.action_chains.reset_actions()

於是很愉快了開始了摸魚~~~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM