为了账号安全,请及时绑定邮箱和手机立即绑定

获取所有由 THEN 包裹的文本 if 条件

获取所有由 THEN 包裹的文本 if 条件

临摹微笑 2022-05-19 14:14:48
html代码<div class=media>   <div class=11></div>   <div class=22></div>   <div class=media-content>       yes, this is the text<BR>       that i want to compare below       multiple line    </div></div><div class=media>   <div class=11></div>   <div class=22></div>   <div class=media-content>       and i want to compare above text multiple line       then if both same, i wanna break the loop       But it is not work    </div></div>成功选择第一个元素(由 chropath 检查)driver.find_elements_by_xpath('//div[@class="media"][last()]//div[@class="media-content"]')成功选择第二个元素(由 chropath 检查)driver.find_elements_by_xpath('//div[@class="media"][last()-1]//div[@class="media-content"]')但是两个文本都不相同,但总是 TRUE 然后中断。if driver.find_elements_by_xpath('//div[@class="media"][last()]//div[@class="media-content"]').gettext() == driver.find_elements_by_xpath('//div[@class="media"][last()-1]//div[@class="media-content"]').gettext():     break是的,这是行不通的。我想比较第一和第二的文本(多行)element(@class=media-content)如果两个多行文本相同,我想停止循环。但是两个文本都与您看到的不同,但总是变为 TRUE 然后 STOPPED(break)我成功选择了项目(*with last[], last[]-1) 但我不知道为什么它会出错.....有没有人可以解决我的新手代码?//text(), .gettext(),.text()
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

试试下面的代码。


items1=[item.text for item in driver.find_elements_by_xpath('//div[@class="media"][last()-1]//div[@class="media-content"]')]

items2=[item.text for item in driver.find_elements_by_xpath('//div[@class="media"][last()]//div[@class="media-content"]')]

if items1==items2:

    print("pass")

else:

    print("fail")


查看完整回答
反对 回复 2022-05-19
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

对我来说,anser 是(如果在 singal div[@class="media-content"] 节点中有多个 div[@class="media-content"] 元素):


media_last = driver.find_elements_by_xpath('//div[@class="media"][last()]//div[@class="media-content"]')

media_last = [a.gettext() for a in media_last]


media_not_last =driver.find_elements_by_xpath('//div[@class="media"][last()-1]//div[@class="media-content"]')

media_not_last = [a.gettext() for a in media_not_last]


if media_last == media_not_last:

    break

您无法在元素数组中获取方法 gettext


或者如果你想得到一个单一的元素,请使用 find_element_by_xpath 方法


查看完整回答
反对 回复 2022-05-19
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

我使用您的 html 测试了以下内容,并且得到了您期望的行为:


from selenium import webdriver

driver = webdriver.Chrome()

driver.get(r'file:///<path to local html file>') # Used local html file for testing purposes

el1 = driver.find_elements_by_xpath('//div[@class="media"][last()]//div[@class="media-content"]')

el2 = driver.find_elements_by_xpath('//div[@class="media"][last()-1]//div[@class="media-content"]')

if el1[0].text == el2[0].text:

    print('Yes')

else:

    print('No')

要理解的一件事是driver.find_elements_by_path()返回一个list对象。因此,即使看起来您正在针对页面中的特定元素,它们也存储在list对象中,如果您希望访问元素的文本,您应该以这种方式引用它们。


查看完整回答
反对 回复 2022-05-19
  • 3 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信