如何使用python selenium从svg中提取文本

如何使用python selenium从svg中提取文本,python,selenium,svg,web-scraping,Python,Selenium,Svg,Web Scraping,我正试图从链接中获取价格: 价格显示在svg标签内的文本标签中 当我使用xpath时: //*[name()='svg']/*[name()='g']//*[name()='text']在浏览器的inspect元素中,我能够找到标记。但是相同的xpath在代码中不起作用 目前的代码是: def get_price(url): driver.get(url) time.sleep(10) try: price_xpaths = driver.find_el

我正试图从链接中获取价格:

价格显示在svg标签内的文本标签中

当我使用xpath时:
//*[name()='svg']/*[name()='g']//*[name()='text']
在浏览器的inspect元素中,我能够找到标记。但是相同的xpath在代码中不起作用

目前的代码是:

def get_price(url):
    driver.get(url)
    time.sleep(10)
    try:
        price_xpaths = driver.find_elements_by_xpath(".//*[name()='svg']//*[name()='g']//*[name()='text']")
    except:
        print("price not found")

    for p in price_tags:
        print(p.text)
当我运行上述代码时,我得到一个空白列表,返回函数find_elements_by_xpath。 我尝试了其他方法,比如切换到默认内容,因为元素位于#document

driver.switch_to_default_content()
但这也没能奏效。
如果有任何其他方法来削价,请让我知道。

它是外部的
SVG
,似乎Selenium在DOM中没有它,所以我必须得到
,它有这个
SVG
文件的url,在
数据中获得这个url,使用
请求下载它,并使用
美化组
获取文本

from selenium import webdriver
import time
import requests
from bs4 import BeautifulSoup

url = 'https://www.kbb.com/cadillac/deville/1996/sedan-4d/'

driver = webdriver.Firefox()
driver.get(url)
time.sleep(5)

# doesn't work - always empty list
#price_xpaths = driver.find_elements_by_xpath(".//*[name()='svg']//*[name()='g']//*[name()='text']")
#price_xpaths = driver.find_elements_by_xpath('//svg')
#price_xpaths = driver.find_elements_by_xpath('//svg//g//text')
#price_xpaths = driver.find_elements_by_xpath('//*[@id="PriceAdvisor"]')
#print(price_xpaths)  # always empty list

# single element `object`
svg_item = driver.find_element_by_xpath('//object[@id="PriceAdvisorFrame"]')

# doesn't work - always empty string
#print(svg_item.get_attribute('innerHTML'))

# get url to file SVG
svg_url = svg_item.get_attribute('data')
print(svg_url)  

# download it and parse
r = requests.get(svg_url)
soup = BeautifulSoup(r.content, 'html.parser')

text_items = soup.find_all('text')
for item  in text_items:
    print(item.text)
结果:

Fair Market Range
$1,391 - $2,950
Fair Purchase Price
$2,171
Typical
Listing Price
$2,476


顺便说一句:其他用户信息:我必须使用位于
US
的proxy/with-IP来查看此页面。对于位置
PL
,显示

Access Denied. 
You don't have permission to access "http://www.kbb.com/cadillac/deville/1996/sedan-4d/" on this server.

有时甚至对于
美国的位置
它也会给我这条信息。

总是把完整的错误信息(从单词“Traceback”开始)作为文本(而不是截图)放在问题中(不是评论)。还有其他有用的信息。请首先尝试获取
svg
,如果获取它没有问题,请尝试下一个元素,然后再尝试另一个元素,以查看哪个元素有问题。顺便说一句:如果它是tag
,那么也许你应该使用
//……
顺便说一句:你的链接只给我一条消息
访问被拒绝。您没有访问“”的权限http://www.kbb.com/cadillac/deville/1996/sedan-4d/“在此服务器上。
-因此无法查看HTML并测试代码。代码中没有错误,但可以说是‘elementnotfound’错误。如果重定向到页面时遇到‘访问被拒绝’,请尝试使用vpn。”。