我将以下代码保存到本地html文件
<object id="PriceAdvisorFrame" type="image/svg+xml" data="https://www.kbb.com/Api/3.9.448.0/71071/vehicle/upa/PriceAdvisor/meter.svg?action=Get&intent=buy-used&pricetype=Private Party&zipcode=99517&vehicleid=439604&hideMonthlyPayment=True&condition=verygood&mileage=11795" style="width: 100%;"></object>
我试图在Chrome浏览器中执行html时从HTML中提取费用。我尝试解析的HTML代码如下所示。但是,使用硒请求文件时,此代码不会出现。
<text xmlns="http://www.w3.org/2000/svg" text-anchor="middle" font-size="14" font-weight="700" fill="#333333" y="-8">$27,938</text>
<text xmlns="http://www.w3.org/2000/svg" text-anchor="middle" font-size="14" font-weight="400" fill="#333333" y="-26">Private Party Value</text>
<text xmlns="http://www.w3.org/2000/svg" text-anchor="middle" font-size="20" font-weight="700" fill="#ffffff" y="-48">$26,995 - $28,888</text>
<text xmlns="http://www.w3.org/2000/svg" text-anchor="middle" font-size="14" font-weight="400" fill="#ffffff" y="-68.8">Private Party Range</text>
到目前为止,这是我的代码:
options = webdriver.ChromeOptions()
options.add_argument('headless')
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.50 Safari/537.36'
options.add_argument('user-agent={0}'.format(user_agent))
driver = webdriver.Chrome(chrome_options=options)
driver.get('file:///F:/Onedrive/Python/KBB/test.html')
print(driver.find_element_by_css_selector('text').text)
关于如何进行这项工作的任何想法?
答案 0 :(得分:0)
您指的'text'
不是css_selector
,而是tag_name
。您可以使用.find_elements_*
收集所有元素,然后提取它们的文本。
driver.get('file:///F:/Onedrive/Python/KBB/test.html')
elements = driver.find_elements_by_tag_name('text')
for element in elements:
text = element.text
if "$" in text:
print(text)
答案 1 :(得分:0)
加载到浏览器中的html在driver.page_source
中没有您想要的信息,因此您不能以这种方式进行选择。浏览器本身基于data
属性发出GET请求,并呈现新内容-但是文件未更新。您可以.get
到data
的源或使用requests
。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(r'path\chromedriver.exe')
driver.get(r'C:\Users\User\Desktop\test.html')
print(driver.page_source)
driver.get(driver.find_element_by_css_selector('[data]').get_attribute('data'))
elem = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR , 'text')))
if elem is not None:
print(elem.text)
答案 2 :(得分:0)
要访问SVG元素,您需要使用以下xpath。
// * [name()='文本']
或
// * [local-name()='text']
尝试以下代码。
elements=WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.XPATH,"//*[name()='text']")))
for ele in elements:
print(ele.text)
要执行上述代码,您需要导入以下内容。
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait