Python + Selenium没有检测到元素

时间:2017-07-14 10:03:41

标签: python selenium web-scraping

我是 Python Selenium 的新手,我在从网上抓取代码时遇到了麻烦。

我不希望任何人为我修复它。我正在寻找问题可能是什么,以便我可以继续。

# inicializar el paketito selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://www.codigosdescuento.com/categoria-accesorios_de_moda.html")
boton_promo = driver.find_element_by_xpath("//a[contains(@class,'boton_descuento')][1]")
boton_promo.click()

#buscamos el codigo 
try:
    WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='rasca_cupon']")))
except:
    print("K va... no se ha encontrado el codigo")
    raise SystemExit


codigo_descuento = driver.find_element_by_xpath("//div[@class='rasca_cupon']")
print(codigo_descuento.text)

它打印异常,即使预期的元素存在并且可见。

我怎么知道是什么让驱动程序看不到元素?

1 个答案:

答案 0 :(得分:1)

Selenium只为自动化浏览器提供API,它不会自动执行。所以你需要手动注意你正在做什么,并需要编写代码来自动执行确切的步骤。

在您的情况下,当您点击链接查看优惠券时,它会打开一个新标签(浏览器窗口),然后在那里显示优惠券。您还必须在Automation中编写该代码。

添加switch_to_window()

后,以下代码工作正常
driver = webdriver.Firefox()
driver.get("http://www.codigosdescuento.com/categoria-accesorios_de_moda.html")
boton_promo = driver.find_element_by_xpath("//a[contains(@class,'boton_descuento')][1]")
boton_promo.click()
driver.switch_to_window(driver.window_handles[-1])
WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='rasca_cupon']")))
codigo_descuento = driver.find_element_by_xpath("//div[@class='rasca_cupon']")
print(codigo_descuento.text)