查找具有相同元素的elemtnt*s*返回数组

2024-06-17 10:54:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经做了两天了。你知道吗

正在尝试从出现在许多div中的span获取所有文本。你知道吗

所有的div看起来都差不多:

<div class="_3_7SH _3DFk6 message-in">
<div class="Tkt2p">
<div class="copyable-text" data-pre-plain-text="[10:26 AM, 5/28/2019] יוסף צדוק: ">
<div class="_3zb-j ZhF0n">
<span dir="rtl" class="XELVh selectable-text invisible-space copyable-text">TEXT TO COPY IS ME</span></div></div>
<div class="_2f-RV"><div class="_1DZAH">
<span class="_1ORuP">
</span><span class="_3EFt_">10:26 AM</span></div></div></div><span></span></div>

以下是查找所有“message in”元素的方法:

in_mesg_arr = driver.find_elements_by_xpath("//div[contains(@class, 'message-in')]")

我得到了数组的长度:11

然后,尝试从span获取所有文本:

for index in in_mesg_arr:
   last_msg = last_msg + str(index.find_element_by_xpath(
    "//span[contains(@class,'selectable-text invisible-space copyable-text')]").text)

但是,我得到了相同的文本(相同的元素一遍又一遍!)。你知道吗

打印(最后一个消息)=布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉

我很乐意为您指路。你知道吗

完整HTML:


Tags: textin文本div元素messagespaceam
3条回答

这些都可以用BeautifulSoup来完成

from bs4 import BeautifulSoup
content = '''
    <div> class = "*something* message-in *something*" <div>
    <span> class = "selectable-text invisible-space copyable-text" <span>
    '''
soup = BeautifulSoup(content,"lxml")

span_text =  [x.get_text() for x in  soup.find_all('span')]



html_con = '''
<div class="_3_7SH _3DFk6 message-in">
<div class="Tkt2p">
<div class="copyable-text" data-pre-plain-text="[10:26 AM, 5/28/2019] יוסף צדוק: ">
<div class="_3zb-j ZhF0n">
<span dir="rtl" class="XELVh selectable-text invisible-space copyable-text">TEXT TO COPY IS ME</span></div></div>
<div class="_2f-RV"><div class="_1DZAH">
<span class="_1ORuP">
</span><span class="_3EFt_">10:26 AM</span></div></div></div><span></span></div>
<div class="_3_7SH _3DFk6123456 message-in">
<div class="Tkt2p">
<div class="copyable-text" data-pre-plain-text="[10:26 AM, 5/28/2019] יוסף צדוק: ">
<div class="_3zb-j ZhF0n">
<span dir="rtl" class="XELVh selectable-text invisible-space copyable-text">New text</span></div></div>
<div class="_2f-RV"><div class="_1DZAH">
<span class="_1ORuP">
</span><span class="_3EFt_">10:26 AM</span></div></div></div><span></span></div>
'''

soup = BeautifulSoup(html_con)

content_message_in= soup.find_all('div', {'class': 'message-in'})
span_content =[x.find_all('span') for x in content_message_in]
span_text  = [x[0].get_text() for x in span_content]


#o/p
['TEXT TO COPY IS ME', 'New text']

是不是当你得到跨度的时候,你用的是

find_element_by_xpath 

而不是

find_elements_by_xpath

所以每次只返回第一个匹配的元素。你知道吗

查看此问题的答案: https://sqa.stackexchange.com/questions/37380/find-elements-by-xpath-issue?answertab=votes#tab-top

for index in last_msg:
   last_msg = last_msg + str(in_mesg_arr[index].find_element_by_xpath(
    "//span[contains(@class,'selectable-text invisible-space copyable-text')]").text)

此代码将始终返回第一个元素,因为它将在DOM中的任何位置搜索span元素。你知道吗

循环中的XPath表达式必须以dot开头作为上下文-具体用途下列任何代码。你知道吗

 in_mesg_arr = driver.find_elements_by_xpath("//div[contains(@class, 'message-in')]")
    for item in in_mesg_arr:
        spanele=item.find_element_by_xpath(".//span[contains(@class,'selectable-text invisible-space copyable-text')]")
        print(spanele.text)

或者

in_mesg_arr = driver.find_elements_by_xpath("//div[contains(@class, 'message-in')]")

for item in range(len(in_mesg_arr)):
    spanele=in_mesg_arr[item].find_element_by_xpath(".//span[contains(@class,'selectable-text invisible-space copyable-text')]")
    print(spanele.text)

告诉我进展如何。你知道吗

相关问题 更多 >