gpt4 book ai didi

python - Selenium,Xpath,选择节点内文本的特定部分

转载 作者:行者123 更新时间:2023-12-01 02:11:30 24 4
gpt4 key购买 nike

我有一个这样的源文件:

<div class="l_post j_l_post l_post_bright  " ...>
<div class="lzl_cnt">
...
<span class="lzl_content_main">
text1
<a class="at j_user_card" username="...">
username
</a>
text3
</span>
</div>
...
</div>

我想要得到text3,目前,我尝试了这个:(我在<div class="lzl_cnt">)

driver.find_element(By.XPATH,'.//span[@class="lzl_content_main"]/text()[1]') 

但是我得到了

"Message: invalid selector: The result of the xpath expression ".//span[@class="lzl_content_main"]/text()[1]" is: [object Text]. It should be an element".

有没有办法获得 "text3"

我应该说得更清楚:

上面的 HTML 是更大结构的一部分,我使用以下 python 代码将其选择出来:

for sel in driver.find_elements_by_css_selector('div.l_post.j_l_post.l_post_bright'):
for i in sel.find_elements_by_xpath('.//div[@class="lzl_cnt"]'):
#user1 = i.find_element_by_xpath('.//a[@class="at j_user_card "]').text
try: user2 = i.find_element_by_xpath('.//span[@class="lzl_content_main"]/a[@username]').text
except: user2 = ""
text3 = ???

print(user2, text3)

最佳答案

在 selenium 中,您不能使用返回属性或文本节点的 XPath,因此不允许使用 /text() 语法。如果您只想获取特定的子文本节点而不是完整的文本内容(由 text 属性返回),您可以执行 JavaScript

您可以应用以下代码来获取所需的文本节点:

...
try: user2 = i.find_element_by_xpath('.//span[@class="lzl_content_main"]/a[@username]').text
except: user2 = ""
span = i.find_element_by_xpath('.//span[@class="lzl_content_main"]')
reply = driver.execute_script('return arguments[0].lastChild.textContent;', span)

您可能还需要执行 reply =reply.strip() 来删除尾随空格

关于python - Selenium,Xpath,选择节点内文本的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48664034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com