如何从带有硒的 A 标签中获取文本?
How to get text from an A tag with selenium?
我一直在尝试在线抓取一些产品,但是当我尝试从 A 标签打印标题时,它给了我这个输出
<selenium.webdriver.remote.webelement.WebElement (session="48e7924c296324a7a5a843d9ccab36fb", element="b8871651-23af-42c6-a49a-5b93fe932653")>
现在这是我的代码
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pandas as pd
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://egypt.souq.com")
dotd = "/html/body/div[2]/div/main/div[1]/div[1]/div/div[1]/a/img"
driver.find_element_by_xpath(dotd).click()
def get_deals():
title_xpath = "/html/body/div[1]/div/main/div/div[4]/div[3]/div[2]/div[1]/div[1]/div/div[2]/ul/li[1]/h6/span/a"
titles = driver.find_elements_by_xpath(title_xpath)
for title in titles:
print(title)
get_deals()
print("successful")
问题是您正在打印包含所有属性的 对象 ,而不是 文本 属性 .
因此,您唯一需要更改的是,不再使用 print(title)
,而是使用 print(title.text)
此输出来自 print()
...
<selenium.webdriver.remote.webelement.WebElement (session="48e7924c296324a7a5a843d9ccab36fb", element="b8871651-23af-42c6-a49a-5b93fe932653")>
...不是任何错误,而是 本身。
看来你很接近。由于您能够提取元素,要提取元素中的 text,您可以使用以下任一方法 :
使用文本属性:
for title in titles:
print(title.text)
使用 get_attribute()
属性:
for title in titles:
print(title.get_attribute("innerHTML"))
参考
您可以在以下位置找到一些相关讨论:
- Difference between text and innerHTML using Selenium
我一直在尝试在线抓取一些产品,但是当我尝试从 A 标签打印标题时,它给了我这个输出
<selenium.webdriver.remote.webelement.WebElement (session="48e7924c296324a7a5a843d9ccab36fb", element="b8871651-23af-42c6-a49a-5b93fe932653")>
现在这是我的代码
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pandas as pd
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://egypt.souq.com")
dotd = "/html/body/div[2]/div/main/div[1]/div[1]/div/div[1]/a/img"
driver.find_element_by_xpath(dotd).click()
def get_deals():
title_xpath = "/html/body/div[1]/div/main/div/div[4]/div[3]/div[2]/div[1]/div[1]/div/div[2]/ul/li[1]/h6/span/a"
titles = driver.find_elements_by_xpath(title_xpath)
for title in titles:
print(title)
get_deals()
print("successful")
问题是您正在打印包含所有属性的 对象 ,而不是 文本 属性 .
因此,您唯一需要更改的是,不再使用 print(title)
,而是使用 print(title.text)
此输出来自 print()
...
<selenium.webdriver.remote.webelement.WebElement (session="48e7924c296324a7a5a843d9ccab36fb", element="b8871651-23af-42c6-a49a-5b93fe932653")>
...不是任何错误,而是
看来你很接近。由于您能够提取元素,要提取元素中的 text,您可以使用以下任一方法
使用文本属性:
for title in titles: print(title.text)
使用
get_attribute()
属性:for title in titles: print(title.get_attribute("innerHTML"))
参考
您可以在以下位置找到一些相关讨论:
- Difference between text and innerHTML using Selenium