2016年8月8日 星期一

初試 SimpleTest Browser

自從知道 Packt 每天都會送出一本電腦技術的電子書時,我幾乎每天都會上去領取一本;但也有錯過了的時候。於是很想把這個工作自動化。

起初是自行解拆網頁,希望用 PHP+Cronjob 能做出登入及領取的動作,如果連下載也能做則更好。可是弄來弄去都弄不到,於是放棄了。今日隨意搜尋一下,發現了 SimpleTest 中的 Browser 有可能做到,值得一試。代碼如下:
<?php
//----------------------------------------------------------------------------------------
//  Scriptable Browser Test
//----------------------------------------------------------------------------------------
//  Written by Pacess HO
//  Copyright 2016 Pacess Studio.  All rights reserved.
//----------------------------------------------------------------------------------------

require_once("simpletest/browser.php");

//----------------------------------------------------------------------------------------
function packt()  {
   $url = "https://www.packtpub.com/packt/offers/free-learning";
   $browser = new SimpleBrowser();

   //----------------------------------------------------------------------------------------
   //  Load first page
   $content = $browser->get($url);
   $count = strlen($content);
   if ($count < 200)  {echo("### Cannot load URL: $url...");  exit(0);}

   $content2 = $browser->click("Log in");
   if ($content == $content2)  {echo("### Content not loaded...");  exit(0);}

   //----------------------------------------------------------------------------------------
   //  Fill in account information
   $success = $browser->setFieldById("email", "sita@chan.com");
   if ($success != true)  {echo("### Cannot found email field...");  exit(0);}

   $success = $browser->setFieldById("password", "Sita0310");
   if ($success != true)  {echo("### Cannot found password field...");  exit(0);}

   //----------------------------------------------------------------------------------------
   //  Login now!
   $content = $browser->click("Login");
   $url = $browser->getUrl();
   echo("URL:[$url]");

   //----------------------------------------------------------------------------------------
   //  Redeem a book
   $browser->click("Claim Your Free eBook");

   $url2 = $browser->getUrl();
   echo("URL:[$url2]");

   echo("Done!");
}

//========================================================================================
packt();

?>
結果還是不行。估計是因為網頁內的 Javascript 沒有執行。我嘗試過編寫一個簡單的網頁,有兩個 HTML 檔。第一個做轉向,另一個才是有內容。結果是內容只停留在轉向那頁。看來以 SimpleTest 來測試簡單的網頁是非常方便;若中間有動態內容時,SimpleTest 未必能成功處理。

沒有留言: