无法在 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()
所以问题是:
- 我试图通过使用 print(texts)
来打印项目列表
- 即使我尝试在 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 名称,即它们可能会更改每个浏览会话。
我愿意解析 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()
所以问题是:
- 我试图通过使用 print(texts) 来打印项目列表
- 即使我尝试在 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 名称,即它们可能会更改每个浏览会话。