Python&Selenium无法在日期选择器中选择日期

问题描述:

我对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

尝试添加一些时间才能等到元素变得可见:

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文件,它仍然无法正常工作。 我会尽量刷干净。 –