Python selenium - 从 p 和 span 获取值

Python selenium - get values from p and span

假设我有这样的代码:

<div class="div1">
            <div class="div2">
            <div class="div3">X:  <span class="SpanX">ValueX</span></div>
            <p class="p_class">A: <span class="SpanA"> ValueA </span> </p>
            <p class="p_class_2">B: <span class="SpanB">ValueB</span></p>
            <p class="p_class">C: <span class="SpanA">ValueC</span></p>
            </div>
</div>      

我想要一本像{X:ValueX, A:ValueA, B:ValueB, C:ValueC}

这样的字典

我试图获得 driver.find_elements_by_xpath('//div[@class = "div1") 但接下来呢?

如何深入结构?如何检索嵌套在 p 中的跨度值?

使用beautifulsoup!它允许您搜索特定的 tags/ids/classes 然后提取 text/links 等

这是文档: https://beautiful-soup-4.readthedocs.io/en/latest/

复制您要检索的每个值的 xpath。你会在那里找到一个模式,一个简单的循环可以用来迭代这些元素。

例如,标签内元素的 xpath 可能如下所示:

- /html/body/div/div/p[1]/span
- /html/body/div/div/p[2]/span
- /html/body/div/div/p[3]/span

按照此模式,您可以使用以下循环来提取所需的值:

for index in range(1,4):

    # concatenating the index values to iterate through the elements
    xpath_string = "/html/body/div/div/p[" + str(index) + "]/span"
  
    # catching that particular element using xpath
    element = driver.find_element_by_xpath(xpath_string)

在 XML 您的代码中,我看到第一个文本对在 <div class="div3"> 内,而所有其他文本对都在 <p> 元素内。所以这里的共同点是所有这些元素都是 <div class="div2"> 元素的直接子元素。
现在您可以获得直接子元素和内部 span 元素的文本值。
您可以获得“键”值列表、“值”值列表,然后将它们压缩到字典中,如下所示:

keys = []
values = []
elements = driver.find_elements_by_xpath("//div[@class='div2']/*")
for element in elements:
    entire_text = element.text
    key = entire_text.split(" ")[0]
    keys.append(key)
elements = driver.find_elements_by_xpath("//div[@class='div2']/*/span")
for element in elements:
    value = element.text
    values.append(value)
dictionary = dict(zip(keys, values))
print(dictionary) #{X:ValueX, A:ValueA, B:ValueB, C:ValueC}