无法在python上使用selenium访问类中的文本



我愿意解析https://2gis.kz,并且我在使用.text或任何用于从类中提取文本的方法时遇到了错误的问题

我正在键入搜索查询,例如";适合度";

我的窗口变量是

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

这是我如何打开一个包含所有基本信息的迷你窗口的简化版本。下面我附上了一段代码,我试图从电话号码夹中提取文本。

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")')

嗨,伙计们,我解决了一个问题。由于某种原因,.文本不起作用。我猜开发人员设法保护了信息不受这种方法的影响。我用了

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(文本(打印项目列表
  2. 即使当我试图在for循环中打印文本变量的每个元素时,我也会遇到错误,因为它是在utf-8中解码的

我希望有人会发现它很有用,不要花太多时间试图修复这样一个简单的错误。

find_elements方法返回一个web元素列表。所以这个

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

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

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

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

最新更新