selenium,python编写脚本,获取不到一个按钮怎么办
1个回答
2017-11-03 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
原则上为以“不动”的属性为目标。
一个节点可以有多个他特有的属性,比如id、比如css、比如文本属性,这些都基本上不会变,就可以拿来做定位节点的方法。
而什么是会变的呢?
我不是做页面开发的,但是我知道,页面有可能是由框架自动生成,当页面中的元素改变了,比如新建用户,那么用户列表就会多了一条记录,这个时候原先定位好的元素层级就有可能发生变化,就好像//div[@id='channel-all']/div/ul/li[4]/a中这个li[4]就有可能不是4了。
所以我们在定位节点的时候要尽量避免这种带数字的节点的出现,同时要尽量避免特别长的xpath路径的出现。
比如题主的这个问题,题主是想点击这个节点,那么看到离这个节点最近且拥有“不动”属性的节点就是上方的div,他的不动属性为id,那么首先输入//div[@id='channel-all']来找到这个div,那么从这个div到目的节点中间有太多的不稳定节点,那么就要尽量不去用他们,我们发现题主是想要点击,我们就可以用这个节点的文本来定位他,那么xpath就可以写成//div[@id='channel-all']//a[text()="财经"],双反斜线表示根目录往下忽略层级的查找。这样写即使中间层级进行变化了,只要这个文本为财经的超链接在//div[@id='channel-all']这个节点下是唯一的就可以正常使用。
以此类推如果这个文本为财经的超链接在整个页面都是唯一的就可以直接使用//a[text()="财经"]了,要是定位其他节点也可以用同样的方法,原则就是使用节点的唯一属性,查找目标节点最近的“不动”属性。
多学习xpath的用法,xpath也可以很灵活,比如xpath中就有following-sibling::以及preceding-sibling::和parent::表示下一个、上一个、父节点。
一个节点可以有多个他特有的属性,比如id、比如css、比如文本属性,这些都基本上不会变,就可以拿来做定位节点的方法。
而什么是会变的呢?
我不是做页面开发的,但是我知道,页面有可能是由框架自动生成,当页面中的元素改变了,比如新建用户,那么用户列表就会多了一条记录,这个时候原先定位好的元素层级就有可能发生变化,就好像//div[@id='channel-all']/div/ul/li[4]/a中这个li[4]就有可能不是4了。
所以我们在定位节点的时候要尽量避免这种带数字的节点的出现,同时要尽量避免特别长的xpath路径的出现。
比如题主的这个问题,题主是想点击这个节点,那么看到离这个节点最近且拥有“不动”属性的节点就是上方的div,他的不动属性为id,那么首先输入//div[@id='channel-all']来找到这个div,那么从这个div到目的节点中间有太多的不稳定节点,那么就要尽量不去用他们,我们发现题主是想要点击,我们就可以用这个节点的文本来定位他,那么xpath就可以写成//div[@id='channel-all']//a[text()="财经"],双反斜线表示根目录往下忽略层级的查找。这样写即使中间层级进行变化了,只要这个文本为财经的超链接在//div[@id='channel-all']这个节点下是唯一的就可以正常使用。
以此类推如果这个文本为财经的超链接在整个页面都是唯一的就可以直接使用//a[text()="财经"]了,要是定位其他节点也可以用同样的方法,原则就是使用节点的唯一属性,查找目标节点最近的“不动”属性。
多学习xpath的用法,xpath也可以很灵活,比如xpath中就有following-sibling::以及preceding-sibling::和parent::表示下一个、上一个、父节点。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询