项目场景:
使用python selenium进行浏览器操作,使用click()进行翻页,翻完之后页面处于最下端
问题描述:
提示:这里描述项目中遇到的问题:
例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据
APP 中接收数据代码:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"xbcdwdw"}
(Session info: chrome=98.0.4758.102)
定位语句经过等待后报错,无法找到相应元素
原因分析:
提示:这里填写问题的分析:
例如:Handler 发送消息有两种方式,分别是 Handler.obtainMessage()和 Handler.sendMessage(),其中 obtainMessage 方式当数据量过大时,由于 MessageQuene 大小也有限,所以当 message 处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。
在很特殊的情况下,当页面翻页之后依然在最下端,上面的元素可能并未载入browser,也就无法完成定位,这个时候很明显的表现是手动定位看得见的地方是可以的,但上部分是不行的,这是由于网页未完成加载的缘故
解决方案:
提示:这里填写该问题的具体解决方案:
例如:新建一个 Message 对象,并将读取到的数据存入 Message,然后 mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();换成 mHandler.sendMessage()。
可以直接将浏览器页面向上滑动,在selenium并没有这样的操作,但可以使用js语句来实现,具体代码如下:
js = "window.scrollTo(0,0)"
#browser是我的chromedriver名称
browser.execute_script(js)
当页面滑到最上面的时候,因为元素被载入,所以定位语句也就不会再报错了
另一个bug是,当你发现无论你怎么使用find——element定位时,它都会输出一个非常奇怪的小数,而且还没有context时,恭喜,你的chromedriver版本不对,请根据自己的chrome浏览器版本和selenium版本下载对应的chromedriver(这个是真的烦,我才刚学,鬼知道它输出是什么样的。。。。切记切记,如果别人完整的程序都没办法定位,去下对应版本吧亲)
下面是我在pycharm的安装包管理器翻到的