如何通过使用selenium在python中指定另一个属性来检索属性

时间:2017-06-26 20:41:05

标签: python html selenium-webdriver

这是来自电子商务网站的代码片段。我需要检索所有

的数据排序等级

HTML网站代码

< a class="search" data-sort-rank="1" href="/shop/products/Cisco-8841-VoIP-Phone/3371367.aspx?pfm=srh">Cisco 8841 VoIP Phone  
</a>



a class="search-result-product-url" data-sort-rank="2" href="/shop/products/Cisco-8851-VoIP-Phone/3371366.aspx?pfm=srh">Cisco 8851 VoIP Phone 

...

...

... and so on

这是我的代码。我正在使用Selenium。我在href中指定了类名和部分文本,如下所示,以找到正确的元素。现在我想得到所有这些元素的数据排序等级

driver = webdriver.Chrome("C:\\All\\chromedriver_win32\\chromedriver.exe")
driver.get('https://www.mywebsite.com/')

element= driver.find_element_by_class_name (class_name= 'search') and driver.find_element_by_partial_link_text('Cisco')

element_attribute_value= element.get_attribute('data-sort-rank')

print('rank is' %element_attribute_value)

任何人都可以纠正我的错误吗?

1 个答案:

答案 0 :(得分:0)

在您的代码中,您有声明:

element = driver.find_element_by_class_name(class_name ='search')和driver.find_element_by_partial_link_text('Cisco')

大概你有这个,因为你希望有一组元素,类名为'search',一组元素的部分文本内容为'Cisco'。集合意味着可能存在多个元素,这反过来暗示您需要find_elements方法之一。

由于您正在处理列表结果并且需要它们的交叉点,因此您需要先将列表转换为集合。

还有一个小问题,webdriver.Chrome没有争论。

>>> from selenium import webdriver
>>> driver = webdriver.Chrome()
>>> driver.get('file://c:/scratch/temp.htm')
>>> search_elements = driver.find_elements_by_class_name('search')
>>> cisco_elements = driver.find_elements_by_partial_link_text('Cisco')
>>> elements = set(search_elements).intersection(set(cisco_elements))
>>> list(elements)[0].text
'Cisco 8841 VoIP Phone'
>>> element = list(elements)[0]
>>> element.tag_name
'a'
>>> element.get_attribute('data-sort-rank')
'1'