2017-07-18 5 views
0

私は論文プロジェクトの飛行データを掻き集めようとしています。具体的にはSTA Travelです。私は多くの経験はありませんが、私は過去に他のページと同じような小さな仕事をしており、問題は一度もありませんでした。しかし、このページを作る際に何か(多くのもの?)は、一見不可能に見えます。クロム、Geckodriver(Mozillaの)とPhantomJS スクラップのためのブラウザの自動化:ドロップダウン/オートコンプリートの入力ボックスによる不可能なページ?

  • CasperJSでCasperJSとPhantomJS
  • とJavascriptとファントムJS私はどちらかと

    • Pythonとセレンを:私がこれまで試してみました何

      hereと与えられた短く一見正直なフォワードコードを使って、拳のテキストボックスをいっぱいにすることさえできませんでした。

      PythonとSeleniumでは、私は幾分余計になってしまいますが、主な理由は、入力ボックスの実装によるものです。その中に何かを入力すると、オートコンプリート結果を示すダイナミックドロップダウンメニューが開きます。そのうちの1つを適切にクリックせずに、入力した後にボックスをクリックするだけで、テキストボックスは自動的にクリアされます。これらのものは、石油を含む石鹸のプログラミングに相当するように感じます - それらをつかむようにしても、あなたのコントロールから外れます。

      ここでは、Python、Selenium、geckodriverがインストールされていると仮定して、簡単な実行可能コードを示します。あなたが表示されます

      # import selenium driver and helpers 
      from selenium import webdriver 
      
      # set browser driver 
      driver = webdriver.Firefox() 
      
      # open url 
      driver.get(url) 
      driver.implicitly_wait(30) 
      
      # select forms 
      depart_input = driver.find_element_by_css_selector(".flight_depart_location.ui-autocomplete-input") 
      destin_input = driver.find_element_by_css_selector(".flight_arrive_location.ui-autocomplete-input") 
      
      # send text 
      depart_input.send_keys(u"Zürich, Schweiz, ZRH") 
      destin_input.send_keys(u"Peking Int'l Apt, China, PEK") 
      

      、第1の入力は、すぐに第二が充填されるよう再び削除されます。私はキーを送信し、それをクリックすることで、能動素子を設定するように、私はオンラインで見つけることができるすべてのトリックを試してみました.ENTER/RETURNを押してボックス間を移動します。しかし、このサイトは私には "unautomatable"と思われます。そして、私は解決策がそれほど難しくないと確信していますが、私はそれを自分で見つけることはできません。ですから、誰かがこのページを自動化してスクラップする方法を知っていれば、とても感謝しています。どんなにソリューションが見えても(Python、Javascript ...何か他のもの)。

      ありがとうございました!

    +0

    は、なぜあなたは来て最初のドロップダウンオプションをクリックしていけませんか? – mosaad

    答えて

    0

    目的の場所にドロップダウンが表示されるように、十分な場所を入力します。次に、希望の場所を含むAタグを探してクリックすることができます。あなたは到着と出発の両方のためにそれを行います。あなたが再利用する可能性が高いこのようなものは、関数に入れるべきです。

    これはどの言語でも尋ねられたので、私はあなたにJavaで通知します。あなたはかなり簡単にPythonにそれを翻訳することができるはずです。

    機能

    public static void setArrival(String arrival) 
    { 
        driver.findElement(By.cssSelector(".flight_arrive_location.ui-autocomplete-input")).sendKeys(arrival); 
        new WebDriverWait(driver, 3).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[contains(.,'" + arrival + "')]"))).click(); 
    } 
    
    public static void setDeparture(String departure) 
    { 
        driver.findElement(By.cssSelector(".flight_depart_location.ui-autocomplete-input")).sendKeys(departure); 
        new WebDriverWait(driver, 3).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[contains(.,'" + departure + "')]"))) 
          .click(); 
    } 
    

    スクリプト

    String arrivalLocation = "Peking"; 
    String departureLocation = "Zürich"; 
    setDeparture(departureLocation); 
    setArrival(arrivalLocation); 
    
    +0

    それはすばらしいです、美しく働いてくれたジェフに感謝します! – Disc