2017-01-10 45 views
1

我基本上試圖獲得一個m3u8文件的鏈接。當頁面第一次加載時,它會請求m3u8文件和每天更改的祕密令牌。如果完全加載,該頁面將在頁面下載。我可以在網絡選項卡上使用chrome開發人員工具查看它。由於這個令牌是動態生成的,我需要讓網站先請求這個文件,然後給我包含令牌的文件的URL(如http://secret-website.com/file?token=342782g1bud1)。Selenium - 等待網頁請求外部URL

我從來沒有使用過硒,所以我想知道如何做到這一點,如果可能的話。我需要以編程方式使用python或c#來完成它。

+0

http://stackoverflow.com/questions/15122864/selenium-wait-until-document-is-ready – Muckeypuck

+0

關於 「等待頁面加載」。這裏有兩種不同的類型。假設您使用的是Chrome,如果該選項卡中的圈子停止旋轉,該頁面是否仍在「加載」?或者你的意思是說它準備好了嗎? –

回答

1

我發現了一個解決方案,它會一直等到它找到.m3u8文件。我使用fiddlecore作爲代理,所以我可以看到瀏覽器發送了什麼。這可以讓我捕獲任何請求,如果請求包含.m3u8,它只會打印出URL(我需要)。請注意,這不會與https工作,因爲fiddlecore需要認證(我想這很容易修復)。這是一個簡單的工作代碼。

bool close = false; 

    // - Initialize fiddler for http proxy 

    Fiddler.FiddlerApplication.Startup(5000, true, false); 
    Fiddler.FiddlerApplication.BeforeResponse += delegate(Session s) 
    { 
     string path = s.fullUrl; 
     if (path.Contains("720p.m3u8")) 
     { 
      Console.WriteLine(path); 
      close = true; 
     } 
    }; 

    // - Create a selenium proxy 
    var seleniumProxy = new OpenQA.Selenium.Proxy { HttpProxy = "localhost:5000"}; 
    var profile = new FirefoxProfile(); 
    profile.SetProxyPreferences(seleniumProxy); 

    // - Initialize selenium for browser automation 
    IWebDriver driver = new FirefoxDriver(profile); 
    driver.Navigate().GoToUrl("http://www.asite"); 
    while (!close) { } 

    driver.Quit(); 
    Fiddler.FiddlerApplication.Shutdown(); 
+0

如果它適合你,你應該接受你自己的答案。 –