使用Python中的Selenium解析HTML5 data-*属性值

met*_*rsk 6 python html5 selenium parsing custom-data-attribute

我正在解析一个JS生成的网页,如下所示:

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.Firefox()
driver.get('https://www.consumerbarometer.com/en/graph-builder/?question=M1&filter=country:singapore,canada,mexico,brazil,argentina,united_states,bulgaria,austria,belgium,croatia,czech_republic,denmark,estonia,finland,france,germany,greece,hungary,italy,ireland,latvia,lithuania,norway,netherlands,poland,portugal,russia,romania,serbia,slovakia,spain,slovenia,sweden,switzerland,ukraine,united_kingdom,australia,china,israel,hong_kong_sar,japan,korea,new_zealand,malaysia,taiwan,turkey,vietnam')

// wait for svg to appear
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.TAG_NAME, 'svg')))

for text in driver.find_elements_by_class_name('bar-text-label'):
    print(text.text)

driver.close()
Run Code Online (Sandbox Code Playgroud)

除了text从类中获取之外,bar-text-label我还想从HTML5数据属性中获取值.例如,<rect rx="3" ry="3" width="76%" height="40" transform="translate(0,40)" data-value="76" class="bar"></rect>我希望能够解析76这个问题.

这可能在Selenium吗?

我尝试了下面的两个,没有成功:

for text in driver.find_elements_by_class_name('bar'): 
    print(data_value.text)

for data in driver.find_elements_by_xpath('//*[contains(@data-value)]/@data-value'): 
    print(data.text)
Run Code Online (Sandbox Code Playgroud)

Jes*_*ith 7

如果您有以下元素:

<rect rx="3" ry="3" width="76%" height="40" transform="translate(0,40)" data-value="75" class="bar">bar1</rect>
<rect rx="3" ry="3" width="76%" height="40" transform="translate(0,40)" data-value="76" class="bar">bar2</rect>
Run Code Online (Sandbox Code Playgroud)

您可以按如下方式获取文本值和属性值:

elements = driver.find_elements_by_class_name('bar')
for element in elements:
    print element.text
    print element.get_attribute('data-value')
Run Code Online (Sandbox Code Playgroud)

打印出:

bar1
75
bar2
76
Run Code Online (Sandbox Code Playgroud)