我正在尝试使用硒在下面的网站上填写表格。 https://bookings.doc.govt.nz/Saturn/Facilities/SearchViewGW.aspx
但是我一直在努力设定日期(甚至无法显示日期选择器)。
通过使用代码,我可以看到值存储在其中:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
browser = webdriver.Firefox()
browser.get('https://bookings.doc.govt.nz/Saturn/Facilities/SearchViewGW.aspx')
el = browser.find_element_by_id('mainContent_homeContent_txtArrivalDate')
el.get_property('value')
el.clear()
el.send_keys("21122018")
但是清除日期并发送新密钥会导致错误弹出窗口。 关于需要单击哪个元素以调出日期选择器或如何直接设置所需日期的任何建议?
答案 0 :(得分:2)
尝试一下,仅使用JavaScript在元素上设置value属性。 如果用一种更好的方法(请等待该元素可用)代替time.sleep,那么这可能不是您正在寻找的方法。
我已经将日期硬编码为20/10/2018
from selenium.webdriver import Chrome
driver = Chrome()
driver.get('https://bookings.doc.govt.nz/Saturn/Facilities/SearchViewGW.aspx')
import time
time.sleep(5)
driver.execute_script(
"document.getElementById(
'mainContent_homeContent_txtArrivalDate').setAttribute('value', '20/10/2018')"
)
答案 1 :(得分:0)
您引用的字段不允许您单击该字段并键入数字,因此您将需要采取另一种方法。
在此处查看此指南:https://www.guru99.com/handling-date-time-picker-using-selenium.html
提供的代码是Java,但Selenium API应该与您所采用的方法相似。
总而言之,您将需要编写如下代码(摘自文章):
//DAte and Time to be set in textbox
String dateTime ="12/07/2014 2:00 PM";
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("http://demos.telerik.com/kendo-ui/datetimepicker/index");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//button to open calendar
WebElement selectDate = driver.findElement(By.xpath("//span[@aria-controls='datetimepicker_dateview']"));
selectDate.click();
//button to move next in calendar
WebElement nextLink = driver.findElement(By.xpath("//div[@id='datetimepicker_dateview']//div[@class='k-header']//a[contains(@class,'k-nav-next')]"));
//button to click in center of calendar header
WebElement midLink = driver.findElement(By.xpath("//div[@id='datetimepicker_dateview']//div[@class='k-header']//a[contains(@class,'k-nav-fast')]"));
//button to move previous month in calendar
WebElement previousLink = driver.findElement(By.xpath("//div[@id='datetimepicker_dateview']//div[@class='k-header']//a[contains(@class,'k-nav-prev')]"));
//Split the date time to get only the date part
String date_dd_MM_yyyy[] = (dateTime.split(" ")[0]).split("/");
//get the year difference between current year and year to set in calander
int yearDiff = Integer.parseInt(date_dd_MM_yyyy[2])- Calendar.getInstance().get(Calendar.YEAR);
midLink.click();
if(yearDiff!=0){
//if you have to move next year
if(yearDiff>0){
for(int i=0;i< yearDiff;i++){
System.out.println("Year Diff->"+i);
nextLink.click();
}
}
//if you have to move previous year
else if(yearDiff<0){
for(int i=0;i< (yearDiff*(-1));i++){
System.out.println("Year Diff->"+i);
previousLink.click();
}
}
}
Thread.sleep(1000);
//Get all months from calendar to select correct one
List<WebElement> list_AllMonthToBook = driver.findElements(By.xpath("//div[@id='datetimepicker_dateview']//table//tbody//td[not(contains(@class,'k-other-month'))]"));
list_AllMonthToBook.get(Integer.parseInt(date_dd_MM_yyyy[1])-1).click();
Thread.sleep(1000);
//get all dates from calendar to select correct one
List<WebElement> list_AllDateToBook = driver.findElements(By.xpath("//div[@id='datetimepicker_dateview']//table//tbody//td[not(contains(@class,'k-other-month'))]"));
list_AllDateToBook.get(Integer.parseInt(date_dd_MM_yyyy[0])-1).click();
///FOR TIME
WebElement selectTime = driver.findElement(By.xpath("//span[@aria-controls='datetimepicker_timeview']"));
//click time picker button
selectTime.click();
//get list of times
List<WebElement> allTime = driver.findElements(By.xpath("//div[@data-role='popup'][contains(@style,'display: block')]//ul//li[@role='option']"));
dateTime = dateTime.split(" ")[1]+" "+dateTime.split(" ")[2];
//select correct time
for (WebElement webElement : allTime) {
if(webElement.getText().equalsIgnoreCase(dateTime))
{
webElement.click();
}
}