获取具有唯一属性的对象索引

时间:2015-04-19 10:59:55

标签: python selenium

我正在尝试使用selenium为kuku kube游戏编写bot。这是我的代码

from selenium import webdriver
driver = webdriver.Firefox()

def clickOnValidElement(driver):
    elements = driver.find_elements_by_css_selector("#box span")
    styles = [element.get_attribute("style") for element in elements]
    for element in elements:
        if (styles.count(element.get_attribute("style")) == 1):
            element.click()
            break
    clickOnValidElement(driver)

driver.get("http://106.186.25.143/kuku-kube/en-3/")
driver.find_element_by_css_selector('.play-btn').click()
clickOnValidElement(driver)

但它对我来说看起来并不是一种有效的算法。我认为还有另一种方法,不是逐个迭代所有列表。我是python中的newbe,所以请帮我找出如何获取具有唯一属性的对象索引。

UPD 以下是 styles 列表的示例:

[
    'background-color: rgb(88, 83, 124);', 
    'background-color: rgb(193, 188, 229);', 
    'background-color: rgb(88, 83, 124);', 
    'background-color: rgb(88, 83, 124);'
]

问题仍然相同:如何获取唯一元素的索引?

UPD2 好的,我更新了我的算法。它好一点,但是......嗯,仍然相信那可以更快:)

from selenium import webdriver
driver = webdriver.Firefox()

def clickOnValidElement(driver):
    try:
        elements = driver.find_elements_by_css_selector("#box span")
        styles = [element.get_attribute("style") for element in elements]
        unique = list(set(styles))
        for style in unique:
            if (styles.count(style) == 1):
                elements[styles.index(style)].click()
                break
        clickOnValidElement(driver)
    except Exception:
        print("Time is out.")

driver.get("http://106.186.25.143/kuku-kube/en-3/")
driver.find_element_by_css_selector('.play-btn').click()
clickOnValidElement(driver)

1 个答案:

答案 0 :(得分:0)

天真的循环中断版本,完全是Pythonic - 它简洁,清晰,高效。

脚本行为缓慢的原因可能是selenium web driver