2017-07-14 113 views
0

我是新來使用PythonSelenium,我有麻煩從網上抓取代碼。Python +硒不檢測元素

我不想讓任何人爲我解決它。我正在尋找可能出現的問題,以便我可以繼續。

# 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

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) 
+0

非常感謝後可以正常使用。我現在讀到.switch_to_window已被棄用,以支持.switch_to.window –