gpt4 book ai didi

python - Xpath 元素在 Selenium 中不匹配,但在浏览器控制台中匹配

转载 作者:行者123 更新时间:2023-12-01 04:25:46 25 4
gpt4 key购买 nike

您好,我有这个 xpath 代码,我想获取链接和数据。

<li class="qTile P-14 Bdbx-1g Bgc-w">
<div class="Lh-16 ">
<h3 id="20151012074222AAY5Tdd" class="qstn-title Fz-15 Fw-b Wow-bw"><a data-rapid_p="1" class="Clr-b" data-ylk="slk:qtitle" href="/question/index?qid=20151012074222AAY5Tdd">Google or Yahoo?</a></h3>
<div class="desc">
Both
</div>
<div class="long-desc Mah-130 Ovy-s D-n">
Both
</div>
<div class="Fz-12 Clr-888">
75 answers
<span class="Fz-14">·</span>
<a data-rapid_p="2" class="Clr-b" data-ylk="slk:cat" href="/dir/index/discover?sid=2115500141">Google</a>
<span class="Fz-14">·</span>
3 days ago
</div>

在此图片中仅存在数据字段,用于获取问题链接的 xpath 效果很好。我尝试使用这个 xpath 并且在浏览器中运行良好,但是当我在 Python 中与 selenium 一起使用时,我遇到了 xpath 错误。

 post_elems = self.driver.find_elements_by_xpath('//li[contains(@class,"qTile P-14 Bdbx-1g Bgc-w")]')

i = 0
for post in post_elems:
data_of_question = post.find_element_by_xpath('.//div[contains(@class,"Fz-12 Clr-888")]/text()[last()]')
url = post.find_element_by_xpath('.//h3/a[contains(@class,"Clr-b")]')
url_accodare = url.get_attribute('href')

最佳答案

问题在于,selenium 中的 XPath 表达式必须指向标签,而不是文本节点。换句话说, .//div[contains(@class,"Fz-12 Clr-888")]/text()[last()] 表达式是非法的,你必须得到这个问题以不同的方式约会。

例如,您可以获取元素的完整文本,并使用正则表达式提取您感兴趣的部分。示例:

import re

value = post.find_element_by_xpath('.//div[contains(@class,"Fz-12 Clr-888")]').text
match = re.search(r"(\d+ days ago)", value)
print(match.group(1))

或者,您也可以获取元素的 outerHTML 并通过解析它来获取所需的文本,例如 BeautifulSoup :

from bs4 import BeautifulSoup

elm = post.find_element_by_xpath('.//div[contains(@class,"Fz-12 Clr-888")]')
data = elm.get_attribute("outerHTML")

soup = BeautifulSoup(data)
print(soup.find_all(text=True)[-1])

当然还有其他选项来提取所需的文本节点。

关于python - Xpath 元素在 Selenium 中不匹配,但在浏览器控制台中匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33159611/

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