0

this for exampleまたはthisのようなページをスクラップする必要があり、Scrap + Seleninumを使用してdatepickerカレンダーとやりとりしています。Scrap + SeleniumでDatepickerをスクラップする

基本的に私の考えは、日付ピッカーの無効なリンク/日付をクリックして、エラーメッセージが表示されるかどうかを確認しようとしていたので、例えば、月の各日の部屋の空き状況を確認する必要があります私はそれが利用可能かどうかを知ることができます。

、これは適切な方法、あるいはどのようにこのツールを使ってこれを行うのであれば、私は考えています。私は彼らと一緒に遊んでいますが、私は最終的な解決策から遠く離れているように見えます。

は、誰もが、私はこれを取り組むかさえ、私はこれを達成するためのコードを提供することができます方法を知っていますか?

+0

はい、あなたが行うことができます見ていると私はセレン+ Javaでそれを行うことができますが、私はあなたがJavaでコードを投稿することができScrapy + Seleninum –

+0

でどういうことを確認していないでしょうか? – psychok7

+0

ええ確認だけで15〜30分に私に –

答えて

1

こんにちは、これはあなたがまた、上記の例この点に注意してください役立ちます

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"); 
     } 

希望以下の答えを見つけてくださいあなたは、コードが自動的に非無効の日付を取りたい場合は、パラメータとしてチェックインとチェックアウトの日付を取るお気軽にお尋ねください私は私の答えを更新します。

+0

感謝し、私はできるだけ早くこれをテストし、それは私がほとんどそこだと思う – psychok7

+0

を動作するかどうか(マークがあなたに正しい答え)あなたが知っている、しかし、私はこの問題に実行しています時々、要素が私がクリックしたいものかどうかをチェックする直前に 'StaleElementReferenceException:メッセージ:キャッシュ内に要素が見つからない - おそらくページが参照されてから変更されていて、' NoSuchElementException:利用可能であるかどうかを確認するメッセージを探す際に要素 'を探す。ところで、あなたは月を変えるためにクリックを追加しませんでしたか? – psychok7

+0

ちょっとした要素の例外を処理する方法を追加するだけです:チェックインとチェックアウトの日付選択のための上記のコードを見ることができます(dateToBeSelected = "19"; datetobeselected = "27";)古い要素を避けるために、コード内で同様に行うことができます。 –

関連する問題