鱼C论坛

 找回密码
 立即注册
查看: 2410|回复: 9

[已解决]一个xpath的写法求助

[复制链接]
发表于 2019-9-27 23:46:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码结构如下
  1. <div class="login-bd">                               
  2.                                 <div id="slide_code" style="margin: 0px auto; width: 260px; height: 0px; position: absolute; top: 70px; left: 30px; display: none;" class="">
  3.                                 </div>
  4. </div>                               
复制代码


网站有个移动图片的验证机制,
移动完成后
id为slide_code的div标签中的style属性值会增加一个display: none
我想匹配出这个display的值用来判断验证是否通过.
想请教各位这个xpath中用contains要怎么写
最佳答案
2019-9-28 08:47:01
之前没用过xpath,学着写一个
  1. from lxml import etree
  2. text='''<div class="login-bd">                                
  3.                                 <div id="slide_code" style="margin: 0px auto; width: 260px; height: 0px; position: absolute; top: 70px; left: 30px; display: none;" class="">
  4.                                 </div>
  5. </div>     '''
  6. html=etree.HTML(text)
  7. print('display: none' in html.xpath('//div[contains(@id,"slide_code")]/attribute::style')[0])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-9-28 08:47:01 | 显示全部楼层    本楼为最佳答案   
之前没用过xpath,学着写一个
  1. from lxml import etree
  2. text='''<div class="login-bd">                                
  3.                                 <div id="slide_code" style="margin: 0px auto; width: 260px; height: 0px; position: absolute; top: 70px; left: 30px; display: none;" class="">
  4.                                 </div>
  5. </div>     '''
  6. html=etree.HTML(text)
  7. print('display: none' in html.xpath('//div[contains(@id,"slide_code")]/attribute::style')[0])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-28 09:21:13 | 显示全部楼层
xpath里所有函数都是协助定位的
你想提取属性值判断 只能老老实实提取@style得到字符串
再进一步用所用编程语言进行处理
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-28 21:00:18 | 显示全部楼层
感谢各位,我自己琢磨出自己要的答案了.
'//div[@id="slide_code" and contains(@style,"display")]'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-28 21:01:36 | 显示全部楼层
塔利班 发表于 2019-9-28 08:47
之前没用过xpath,学着写一个

selenium中属性值不能用attribute,要用@符号的,比如找属性style 就是@style
我自己搞定了 多谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-28 21:02:28 | 显示全部楼层
yjsx86 发表于 2019-9-28 09:21
xpath里所有函数都是协助定位的
你想提取属性值判断 只能老老实实提取@style得到字符串
再进一步用所用编 ...

你错了,字符串也是可以得到的.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-28 21:24:45 | 显示全部楼层
sxfxtf 发表于 2019-9-28 21:01
selenium中属性值不能用attribute,要用@符号的,比如找属性style 就是@style
我自己搞定了 多谢

额,是吗,但是我运行也是可以的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-29 12:51:41 | 显示全部楼层
本帖最后由 yjsx86 于 2019-9-29 12:55 编辑
sxfxtf 发表于 2019-9-28 21:02
你错了,字符串也是可以得到的.


em~~
也许是我搞错了
但是至少你上面的xpath:'//div[@id="slide_code" and contains(@style,"display")]'
其中的语法意思是:
寻找div
条件1:id="slide_code"
条件2:提取div里的style属性值字符串, 如果这个字符串里有子串"display",  contains(@style,"display")返回真
如果条件1与2都为真 则返回这个div元素 以供处理.
所以 以你的代码 可以说碰巧可以达到你的要求
无论display: none;还是display为inline或者block都是你xpath代码的选取范围;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-29 13:31:15 From FishC Mobile | 显示全部楼层
ID值是唯一的,不用后面的and也可以。xpath中。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-3 22:05:20 | 显示全部楼层
yjsx86 发表于 2019-9-29 12:51
em~~
也许是我搞错了
但是至少你上面的xpath:'//div[@id="slide_code" and contains(@style,"display ...

不不不,原始代码中有个hover机制,你点击了以后,类名中会添加一个display:none的属性值.类似于验证码消失了,默认是显示的,一旦验证通过display为none就消失了,就等同于你通过了验证
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-5 02:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表