[英]Running Selenium on Azure Web App
我有一個Azure Web應用程序,當我在控制器上調用Action時,我想用它來屏幕抓取網站,就像這樣。
var driver = new PhantomJSDriver();
driver.Url = "http://url.com";
driver.Navigate();
var source = driver.PageSource;
var pathElement = driver.FindElementByXPath("//table[@class='someclassname']");
string innerHtml = "";
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
if (js != null)
{
innerHtml = (string)js.ExecuteScript("return arguments[0].innerHTML;", pathElement);
}
return innerHtml;
這在本地工作正常,但是當我上傳到我的Azure Web App時,我收到此錯誤
無法在http:// localhost:51169 /上啟動驅動程序服務
我認為這與防火牆有關,因為我需要在應用程序第一次運行時在防火牆設置中批准PhantomJS。 我的問題是如何在Azure中部署這個工作? 它是否可能,或者我是否需要將其配置為單元測試並在Visual Studio中運行?
PhantomJS今天在Azure Web Apps運行的沙箱中不起作用。 請參閱Wiki以獲取當前已知不可用的內容列表,以及有關沙箱的許多其他信息。
我將在這里發布這個適用於Azure的代碼片段。 然而,它仍然無法在生產中使用,因為我不斷得到隨機連接錯誤,例如:
無法連接到遠程服務器內部消息:無法連接到遠程服務器內部消息:嘗試以其訪問權限禁止的方式訪問套接字
完全相同的代碼在控制台或Windows應用程序環境中運行良好。
PhantomJSDriver driver = null;
PhantomJSDriverService service;
ServicePointManager.ServerCertificateValidationCallback = new
RemoteCertificateValidationCallback
(
delegate { return true; }
);
int retry = 0;
while (driver == null && retry < 3)
{
try
{
service = PhantomJSDriverService.CreateDefaultService();
var uri = service.ServiceUrl;
var port = service.Port;
service.LocalToRemoteUrlAccess = true;
var ghostDriverPath = service.GhostDriverPath;
service.HideCommandPromptWindow = true;
service.Start();
var options = new PhantomJSOptions();
driver = new PhantomJSDriver(service, options);
}
catch (Exception ex)
{
if (driver != null)
{
driver.Close();
driver.Quit();
driver = null;
}
Thread.Sleep(retry * 1500);
ServiceAudit.Default.TraceDebug($"Starting web driver failed on {retry} try");
}
retry++;
}
if (driver == null)
{
ServiceAudit.Default.TraceError($"Web driver could not be started");
}
return driver;
我會重新考慮你在這里使用Selenium的解決方案。 Selenium用於自動化webapp的手動測試。 基本上,自動填寫表單,單擊按鈕等。
即使Selenium和您的PhantomJS驅動程序確實在您的Azure webapp上運行沒有問題,每1 Http請求也會有一個瀏覽器的瓶頸。 我懷疑你很快會遇到性能問題。
此外,驅動程序加載PhantomJS,請求頁面,交互和關閉PhantomJS所需的時間很慢。
在您的情況下,聽起來您沒有與源站點進行交互,只需要數據。 所以也許只需解析HTML DOM就足夠了。
聽起來你應該做的就是發布到Azure WebRole。 看看這個答案... https://stackoverflow.com/a/43532701/1486716
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.