Python和Selenium - 获取可见的元素

时间:2017-07-24 14:53:08

标签: python selenium

使用 Python 3

场合

我选择了一些具有特定xpath查询的元素。

该xpath查询有许多匹配项。

我想获取与当前可见元素对应的完全匹配。

备注

总有N个匹配(N大于1。)

始终只有一个匹配可见。

实际上,这是关于在某些时刻使用javascript显示或不显示弹出窗口。

问题

如何迭代所有这些结果并知道用户可以看到哪一个?

更新

网站是:go to website

如果您等待几秒钟,则会显示一个弹出窗口。

我的xpath查询是:

//div[@class='wrapper-code-reveal']//input[@class='code']

但在这种情况下有23场比赛。

我如何获得正在显示的完全匹配?

我尝试点击它,这会在不可见时给出异常。

codigos_descuento = driver.find_elements_by_xpath("//div[@class='wrapper-code-reveal']//input[@class='code']")

for codigo in codigos_descuento:
    try:
        codigo.click()
        codigo_descuento_texto = codigo.get_attribute('value')
    except:
        print(traceback.format_exc())
        continue

2 个答案:

答案 0 :(得分:1)

这是Selenium的一个工作示例。我不是通过可见性来摆弄找到正确的,而是从URL中获取商品ID,并使用它来查找正确的元素。

from selenium import webdriver

driver = webdriver.Chrome()


def get_offer_id_from_url(url):
    offer_id = url.split('#')[1]
    offer_id = offer_id.split('-')[1]
    return offer_id


def get_discount_code(url, offer_id):
    offer_div_id = 'd-%s' % offer_id
    driver.get(url)
    discount_elem = driver.find_element_by_xpath(
        "//div[@id='%s']//input[@class='code']" % offer_div_id
    )
    discount_code = discount_elem.get_attribute('value')
    return discount_code


url = 'https://www.savoo.es/c-Alimentacion-codigo-promocional.html#p-5204957'
offer_id = get_offer_id_from_url(url)
discount_code = get_discount_code(url, offer_id)
print(discount_code)

答案 1 :(得分:0)

我的回答来得有点晚,但是我认为检查元素是否可见的一种方法就是简单地检查其在屏幕上的位置。 visible_elem =无

for elem in codigos_descuento:
    if elem.location["x"] > 0 and elem.location["y"] >0:
        visible_elem = elem
        print("Visible Element found!")
        break