鱼C论坛

 找回密码
 立即注册
查看: 2014|回复: 13

[已解决]xpath里,请问怎么用 ends-with 或 正则 (但正则可能用不了)把srt这行选出来

[复制链接]
发表于 2022-12-31 09:50:32 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 blackantt 于 2023-1-1 12:17 编辑

<a href="./download/file.php?mode=view&amp;id=631&amp;sid=3e5113d65c1f599a27b0d63b85ebab6e">2022_12_30_1.mp3</a>
<a href="./download/file.php?mode=view&amp;id=631&amp;sid=3e5113d65c1f599a27b0d63b85ebab6e">2022_12_30_1.mp3.srt</a>

xpath里,
以上2行的位置,用法都差不多,文件主名123是可变的。请问怎么用 ends-with 或 正则 (但正则,ends-with方法是xpath 2.0的语法,而浏览器只支持xpth 1.0)把srt这行选出来?

解决了!:
//a[contains(text(),'.mp3') and contains(text(),'.srt')]                 #匹配srt
//a[contains(text(),'.mp3') and not(contains(text(),'.srt'))]          #不匹配srt

或者
//a[string-length(substring-before(substring-after(.,'mp3'), 'srt')) = 0]       #mp3
//a[string-length(substring-before(substring-after(.,'mp3'), 'srt')) = 1]           #mp3.srt


或者
(//...)[1]
(//...)[2]


-------------------------------------------------------------------------------------------------------
//a[string-length(substring-before(substring-after(.,'mp3'), 'srt')) = 1 and contains(@href, 'download')]/../../span[@class="attach-controls"]/input[@value="Place inline"]   #mp3.srt
//a[string-length(substring-before(substring-after(.,'mp3'), 'srt')) = 0 and contains(@href, 'download')]/../../span[@class="attach-controls"]/input[@value="Place inline"]   #mp3

//a[string-length(substring-before(substring-after(.,'mp3'), 'srt')) = 0]/../../span[@class="attach-controls"]/input[@value="Place inline"]   #mp3
//a[string-length(substring-before(substring-after(.,'mp3'), 'srt')) = 1]/../../span[@class="attach-controls"]/input[@value="Place inline"]   #mp3.srt




以下是ends-with 替代解决方案,
------------------------------------------
<span class="value">PROVIDER_629_54678932</span>
//span[string-length(substring-before(substring-after(.,'PROVIDER_6'), '_')) = 2 and contains(@class, 'value')]
说明:

substring-after(.,'PROVIDER_6')从文本表示形式以"PROVIDER_6"开头的节点返回"PROVIDER_6"之后的子字符串:

"PROVIDER_628_54678931">"28_54678931"

substring-before(<STRING>, '_')在"_"之前提取子字符串:

"28_54678931">"28"

string-length(<STRING>) = 2检查字符串长度是否正好等于2:

"28"的字符串长度等于2

因此,在您的例子中,XPath将“忽略”"PROVIDER_730_54678933",因为它不是以"PROVIDER_6"和"PROVIDER_6542_54678934"开头,因为"542"的字符串长度等于3,而不是2

-------------------------------------------

最佳答案
2022-12-31 11:34:17
https://blog.csdn.net/qdPython/article/details/120846176
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-31 10:03:01 From FishC Mobile | 显示全部楼层
xpath要从根目录开始,你这只有一条是很难提取准确的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-31 10:35:17 | 显示全部楼层
本帖最后由 suchocolate 于 2022-12-31 10:36 编辑

那不是a标签的text吗,找input做啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-31 10:38:05 | 显示全部楼层
suchocolate 发表于 2022-12-31 10:35
那不是a标签的text吗,找input做啥

别人的类似问题。 怎么能利用它,把我的问题解决下?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-31 10:39:05 | 显示全部楼层
blackantt 发表于 2022-12-31 10:38
别人的类似问题。 怎么能利用它,把我的问题解决下?

原网页发一下,我看下网页码源
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-31 10:44:13 | 显示全部楼层
本帖最后由 blackantt 于 2022-12-31 10:52 编辑
suchocolate 发表于 2022-12-31 10:39
原网页发一下,我看下网页码源


https://forum.chinese-learning.me/viewtopic.php?f=5&t=262

怎么区别 点击 这2个 “Place inline"?




place.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-31 10:54:20 | 显示全部楼层
本帖最后由 blackantt 于 2022-12-31 10:56 编辑
suchocolate 发表于 2022-12-31 10:39
原网页发一下,我看下网页码源


更新了图片, 怎么区别 点击 这2个 “Place inline"?

本来用  page.locator('//td/span/a[contains(text(),"mp3")]/../../span[@class="attach-controls"]/input[@value="Place inline"]').click()  就能点mp3, 但又加了个  mp3.srt, 就没法用 contains了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-31 11:08:34 | 显示全部楼层
blackantt 发表于 2022-12-31 10:54
更新了图片, 怎么区别 点击 这2个 “Place inline"?

本来用  page.locator('//td/span/a[contains( ...

用正则
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-31 11:10:11 | 显示全部楼层


正则好像是xpath 2.0 的东西。 能示范下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-31 11:33:35 | 显示全部楼层
不对,应该用find语句
find("<a class="lb"  name="tj_login" onclick="return false;">.srt</a>")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-31 11:34:17 | 显示全部楼层    本楼为最佳答案   
https://blog.csdn.net/qdPython/article/details/120846176
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-31 12:21:37 | 显示全部楼层
blackantt 发表于 2022-12-31 11:10
正则好像是xpath 2.0 的东西。 能示范下吗?

谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-1 12:07:52 | 显示全部楼层
//a[contains(text(),'.mp3') and contains(text(),'.srt')] #匹配srt
//a[contains(text(),'.mp3') and not(contains(text(),'.srt'))] #不匹配srt
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-1 12:16:03 | 显示全部楼层
双花大红棍 发表于 2023-1-1 12:07
//a[contains(text(),'.mp3') and contains(text(),'.srt')] #匹配srt
//a[contains(text(),'.mp3') and n ...

妙!  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 14:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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