2017-02-12 224 views
1

我對Python非常陌生,並且學習如何使用Selenium來取消數據。 (編輯:Python&Selenium無法在日期選擇器中選擇日期

我試圖挑選從一個datepicker形式的日期monmondo.com(例如着想)

這是我設法得到最遠時遇到一個問題,我設法走遠一點比以前,但我仍然堅持)

from selenium import webdriver 
browser = webdriver.Firefox() 

browser.get("https://www.momondo.com") 
browser.implicitly_wait(5) 
date = browser.find_element_by_name("ctl00$Content$ctl04$SearchFormv8$SearchFormFlight$InputDepart").click() 
browser.implicitly_wait(5) 
test= browser.find_elements_by_xpath("//*['ui-datepicker-div']//td[@data-year='2017'][@data-month='2']/a[@class='ui-state-default'][@href='#'][text()='20']") 
test[0].click() 

導致

selenium.common.exceptions.ElementNotVisibleException: Message: 

我已經測試儀firepath的XPath和它似乎正常工作,因爲它是foun d在頁面的源代碼中。

日曆的天源代碼的網頁結構爲:

<td class=" " data-handler="selectDay" data-event="click" data-month="2" data-year="2017"><a class="ui-state-default" href="#">20</a></td> 

    <a class="ui-state-default" href="#">20</a> 

我模糊的猜測是,該數據甚至點擊觸發的選擇,但它似乎是位於班以上步驟:當我可以找到號碼。這是說我不確定是這樣。

我真的很感激,如果你能幫助像我這樣的新人!

謝謝!

+0

ElementNotVisibleException,好了,該元素是不可見的。你能在瀏覽器中看到這個元素嗎? – Usmiech

+0

被人說,這聽起來很直接!代碼點擊打開日曆,但不幸的是沒有任何反應。 它可能與彈出窗口有關嗎? 非常感謝您的意見。 –

+0

因此,選取器在彈出窗口?如果沒有,並且你不能在selenium中單擊它,那麼可以使用像$(「css_selector」)這樣的jquery。click() Selenium可以執行JS。 這不應該引發錯誤,但一定要在瀏覽器中檢查開發者控制檯。順便說一句。 monmondo.com顯示一些日本託管網站 – Usmiech

回答

1

嘗試添加一些時間才能等到元素變得可見:

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait as wait 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions as EC 

browser = webdriver.Firefox() 
browser.get("https://www.momondo.com") 
browser.implicitly_wait(5) 
# Click to open drop-down 
date = browser.find_element_by_xpath("//div[@class='input _date-depart']/div[@class='ui-calendar']/input").click() 
# Choose depart date 
wait(browser, 10).until(EC.visibility_of_element_located((By.XPATH, "//td[@data-handler='selectDay']/a[text()='20']"))).click() 
# Choose return date 
wait(browser, 10).until(EC.visibility_of_element_located((By.XPATH, "//td[@data-handler='selectDay']/a[text()='30']"))).click() 
+0

非常感謝這段代碼! 起初,當我跑了它,它等到超時打開彈出,所以要仔細檢查我跑到另一臺計算機上,那裏,奇蹟,它的工作! 我認爲這與我第一次運行硒時意外丟棄的消息有關,問題是我不知道如何改正它,但這是另一回事。 –

+0

歡迎。如果我的回答幫助您解決了當前問題,請將其標記爲「已接受」。謝謝 – Andersson

+0

完成了,再次感謝! 如果我找到Firefox的解決方案,我會發布它,到目前爲止,我刪除了Geckodriver和pref文件,它仍然無法正常工作。 我會盡量刷乾淨。 –

相關問題