【问题标题】:how to retrieve an attribute by specifying another in python using selenium如何通过在 python 中使用 selenium 指定另一个属性来检索一个属性
【发布时间】:2017-06-26 20:41:05
【问题描述】:

这是来自电子商务网站的代码的 sn-p。我需要检索所有的数据排序等级


网站的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

这是我的代码。我正在使用硒。我在 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)

谁能纠正我的错误?

【问题讨论】:

    标签: python html selenium-webdriver


    【解决方案1】:

    在您的代码中,您有以下语句:

    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'
    

    【讨论】:

    • 嗨,感谢您的帮助,但它仍然给我以下错误-------------Traceback(最近一次通话最后):文件“C:/ Users/aga/first.py",第 30 行,在 element=list(elements)[0] IndexError: list index out of range
    • 我正在尝试在电子商务网站的浏览器中搜索关键字(此处为手机),然后在搜索结果中找到我公司的产品搜索结果位置。(此处为 CISCO)网站的html 具有数据排序等级。我需要检索它以获得位置
    • 您应该将其作为单独的问题提交。如果我上面提供的内容解决了您当时面临的问题,那么您应该将其标记为已接受。
    • 感谢您的回复。事实上,我正在做同样的事情。这是问题陈述,那是代码。
    • 您在本次对话开始时提到的那个错误意味着找不到您要搜索的内容,因此elementsNone。那么表达式list(elements) 的结果将是一个没有元素0 的空列表。我之所以这样回答是因为,虽然我已经多次重读这段对话,但我仍然不明白。
    猜你喜欢
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多