0

this for example veya this gibi bir sayfayı not etmem gerekiyor ve bir tarihçiotu takvimiyle etkileşimde bulunmak için Scrapy + Seleninum kullanıyorum.Scrub + Selenium ile bir Datepicker'ın görüntülenmesi

Temel olarak, örneğin, her ay için odaların kullanılabilirliğini bir ay içinde kontrol etmem gerekiyor, bu nedenle fikrim tarih seçici üzerindeki devre dışı olmayan bağlantıları/tarihleri ​​tıklamaya çalışıyor ve bir hata mesajının görünüp görünmediğini kontrol ediyordu. onun müsait olup olmadığını bilmem.

Bunun bu yolla mı, yoksa nasıl yapılacağını mı bildiğine dair bir fikrim yok. Onlarla oynamaktayım ama hala son bir çözümden çok uzaktayım.

Bunu nasıl başarabileceğimi bilen var mı, yoksa bunu başarabilmek için bana kod yazabilir mi? otomatik sormaya çekinmeyin kodu olmayan engelli tarih almak istiyorsanız

+0

evet neye bakıyorsunuz ve selenium + java'da yapabilirim ama Scrapy + Seleninum –

+0

ile kastettiğinizden emin değilim Java'da kod yazabilir misiniz? – psychok7

+0

Evet, sadece bana 15-30 dakika –

cevap

1

Merhaba bulmak Lütfen ayrıca bu yukarıdaki örneği dikkat yardımcı olur

WebDriver driver = new FirefoxDriver(); 
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
driver.manage().window().maximize(); 
driver.get("https://www.airbnb.pt/rooms/516301?check_in=2016-04-14&guests=1&check_out=2016-04-17"); 

// selecting firstdate picker -- check in 

driver.findElement(By.xpath("//*[@class='col-sm-6']/input")).click(); 
// note calendar is not completely visible hence to make it visible 
// scroll a little bit down 
((JavascriptExecutor) driver).executeScript("window.scrollBy(0,200)"); 
// take all calendar dates inside the list 
// here i have update my code to skip stale element exception 
List<WebElement> alldates = driver.findElements(By.xpath("//*[@class='ui-datepicker-calendar']/tbody/tr/td/a[contains(@class, 'ui-state-default')]")); 
System.out.println("Size is : "+ alldates.size()); 
// suppose you want to select 27 form the all dates 
// keeping it as a parameter 
String dateToBeSelected = "19"; // check in 
for(int i=0;i<alldates.size();i++){ 
    alldates = driver.findElements(By.xpath("//*[@class='ui-state-default']")); 
System.out.println("dates is : " + alldates.get(i).getText()); 
// selects a check-in date 
if(alldates.get(i).getText().equals(dateToBeSelected)){ 
    alldates.get(i).click(); 
    break; 
      } 
     } 
// on selection of Checkin date check out calender automatically pop ups 
System.out.println("--------------------------"); 
String datetobeselected = "27"; 
for(int i=0;i<alldates.size();i++){ 
    alldates = driver.findElements(By.xpath("//*[@class='ui-state-default']")); 
System.out.println("dates is : " + alldates.get(i).getText()); 
// selects a check-in date 
if(alldates.get(i).getText().equals(datetobeselected)){ 
    alldates.get(i).click(); 
    break; 
      } 
     } 
// actually after calendar selection whatever text is shown in red color 
// i am not sure what is it (sorry only English) 

// identify the text with red color is present or not 
boolean errorMsg = driver.findElement(By.xpath("//*[@class='panel-body panel-light']/div[2]/p")).isDisplayed(); 
if(errorMsg){ 
    System.out.println("error msg is displayed"); 
}else{ 
System.out.println("error msg is not - displayed"); 
     } 

Umut altında cevap parametresi olarak check-in ve check-out tarihini alır cevabımı güncelleyeceğim.

+0

teşekkürler, bunu en kısa sürede test edeceğim ve bildiğiniz zaman (doğru olarak cevapladığınıza işaret edelim) – psychok7

+0

çalışıyorum sanırım neredeyse oradayım ama bu konuya koşuyorum bazen öğenin "StaleElementReferenceException" ı tıklamak istediğimi kontrol etmeden hemen önce: İleti: Önbellekteki bulamıyor - belki de sayfa yukarıdan baktı ve ben de bir "NoSuchElementException" yazıyordum: İleti: Unable Kullanılabilir olup olmadığını kontrol etmek için mesajı ararken öğeyi bulmak için. Bu arada, ayları değiştirmek için tıklamayı eklemediniz mi? – psychok7

+0

sadece eski eleman istisnasıyla nasıl baş edeceğinizi eklemek için: yukarıdaki kodu check-in ve check-out tarihi seçim döngülerinde görebilirsiniz (dateToBeSelected = "19"; datetobeselected = "27";) tekrar alldates denedim sadece eskiyen elemandan kaçınmak için, kodunuzda da bunu yapabilirsiniz. –