使用 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
答案 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