2016-04-06 26 views
1

Python'da selenyum kullanılarak bu site'daki bir takvim girdisine tıklamak istiyorum. Her takvim girişini açıkça görebilmeme rağmen ve xpath, id vb. Alabiliyorum. Ancak elementi bulmaya çalıştığımda bir hata mesajı alıyorum. Python selenium ile görünür bir öğe bulunamıyor

browser = webdriver.Firefox(firefox_profile=fp) 
browser.get(url) 
browser.implicitly_wait(5) 
el=browser.find_element_by_id('20160420') 

herhangi bir öneriniz (I kareler arasında geçiş çalıştı (Örneğin, I = 20 Nisan günü için bağlantı kimliğine sahipse o '20160420' görebilir), boşuna ancak etkin unsurlar vb yüzden uzak ...)

+0

Doğru iframe'e geçtiğinize emin misiniz? – Zhack

+0

Oldukça emin değilim. Kodda iki kare gördüm ve ikisine de geçmeyi denedim. Tüm kareleri listelemenin bir yolu var mı? – gpanterov

cevap

2

Sorun kodunuzun iframe konumuna henüz geçmediği. Aşağıdaki örnek kodu inceleyin:

browser = webdriver.Firefox(firefox_profile=fp) 
browser.get(url) 
browser.implicitly_wait(5) 
time.sleep(5) 
iframe = browser.find_element_by_css_selector('#crowdTorchTicketingMainContainer > iframe') 
browser.switch_to.frame(iframe) 
el=browser.find_element_by_id('20160420') 
print(el.text) 
+0

Bu yaptı! Teşekkürler! Hızlı takip - Doğru çerçeve için css seçiciyi nasıl buldunuz? Bu çerçeveyi ham sayfa kaynağında aramayı denedim ancak hiçbir şey çıkmadı – gpanterov

+0

Öğelerin hiyerarşisini görmek için Chrome Dev'Tool'u kullanabilirsiniz. Bu yayında yanıtımı gör: http://stackoverflow.com/questions/35194819/unable-to-access-login-container-elements-in-chrome/35196463?noredirect=1#comment58112245_35196463. Css Seçici ifadesi ile ilgili olarak kendim yarattım. Https://saucelabs.com/resources/selenium/css-selectors adresinden ilginç örnekler görebilirsiniz. – Buaban

0

konu Aradığınız elemanı bir iframe olduğunu gibi görünüyor ve siz takvim öğesi erişebilirler önce geçmek zorunda:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait as WDW 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import NoSuchElementException,  TimeoutException, StaleElementReferenceException 


url = 'https://hornblowernewyork.com/cruises/international-sightseeing-cruise' 
browser = webdriver.Firefox() 
browser.get(url) 

# seach for the appropriate iframe 
frame = browser.find_element(By.CSS_SELECTOR, "#crowdTorchTicketingMainContainer > iframe") 
if not frame: 
    raise Exception('Frame not found') 

# once the correct iframe is found switch to it, 
# then look for your calendar element 
browser.switch_to.frame(frame) 
try: 
    el = WDW(browser, 10).until(
    EC.presence_of_element_located((By.ID, "20160406")) 
) 
except (TimeoutException, NoSuchElementException, StaleElementReferenceException), e: 
    print e 
else: 
    print el 
+0

iframe'i doğrudan elde etmek için css seçiciyi kullanırsak bence daha iyi olur. Örneğin, frame = find_element_by_css_selector ("iframe [src * = 'ticketmob']") – Buaban

+0

yorumlarınıza dayanarak @Buaban, özniteliklere göre grup filtrelemede sıralama yapmak yerine cevabımı css seçicisi ile yalnızca bir iframe aramak için değiştirdim iframe'ler içinde. – KrusherKailash