这是来自电子商务网站的代码片段。我需要检索所有
的数据排序等级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)
任何人都可以纠正我的错误吗?
答案 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'