无法在 python 上使用 selenium 从 class 访问文本

Unable to access text from a class using selenium on python

我愿意解析 https://2gis.kz ,我遇到了在使用 .text 或任何用于从 class

中提取文本的方法时出现错误的问题

我正在输入搜索查询,例如“健身”

我的 window 变量是

all_cards = driver.find_elements(By.CLASS_NAME,"_1hf7139")
for card_ in all_cards:
    card_.click()
    window = driver.find_element(By.CLASS_NAME, "_18lzknl")

这是一个非常简化的版本,说明了我如何打开其中包含所有基本信息的迷你 window。下面我附上了一段代码,我试图从 phone 号码持有者中提取文本。

    texts = window.find_elements(By.CLASS_NAME,'_b0ke8')

    print(texts) # this prints out something from where I am concluding that this thing is accessible
    try:
        print(texts.text)
    except:
        print(".text")
    try:
        print(texts.text())
    except:
        print(".text()")
    try:
        print(texts.get_attribute("innerHTML"))
    except:
       print('getAttribute("innerHTML")')
    try:
        print(texts.get_attribute("textContent"))
    except:
        print('getAttribute("textContent")')
    try:
        print(texts.get_attribute("outerHTML"))
    except:
        print('getAttribute("outerHTML")')

大家好,我解决了一个问题。 .text 出于某种原因无法正常工作。我猜开发人员以某种方式设法保护信息不被使用这种方法。我用了

get_attribute("innerHTML") # afaik this allows us to get a html code of a particular class

现在它就像一个魅力。

                texts = window.find_elements(By.TAG_NAME, "bdo")

                with io.open("t.txt", "a", encoding="utf-8") as f:
                    for text in texts:
                        nums = re.sub("[^0-9]", "", 
                        text.get_attribute("innerHTML"))
                        f.write(nums+'\n')
                    f.close()

所以问题是:

  1. 我试图通过使用 print(texts)
  2. 来打印项目列表
  3. 即使我尝试在 for 循环中打印 texts 变量的每个元素,我也会收到错误,因为它是用 utf-8 解码的。

我希望有人会发现它很有用,并且不会花费过多的时间来修复这样一个简单的错误。

find_elements 方法 returns 网络元素列表。所以这个

texts = window.find_elements(By.CLASS_NAME,'_b0ke8')

为您提供 texts 网络元素列表。
您不能直接在 list.
上应用 .text 方法 为了获取每个元素文本,您必须遍历列表中的元素并提取该元素文本,如下所示:

text_elements = window.find_elements(By.CLASS_NAME,'_b0ke8')
for element in text_elements:
    print(element.text)

此外,我不确定您使用的定位器。
_1hf7139_18lzknl_b0ke8 class 名称似乎是动态的 class 名称,即它们可能会更改每个浏览会话。