从过去两个月开始,我一直在研究我的项目,一切正常,但我在这里遇到了问题。我一直在 C# 中运行我的脚本:
using OpenQA.Selenium;
using OpenQA.Selenium.PhantomJS;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace console
{
class Program
{
static void Main(string[] args)
{
IWebDriver driver = new PhantomJSDriver();
var url = "http://example1.com";
driver.Navigate().GoToUrl(url);
var r = driver.FindElements(By.CssSelector("css selector of example1.com"));
var d = r.First().Text;
Console.WriteLine(d);
var phantomJSDriverService = PhantomJSDriverService.CreateDefaultService();
IWebDriver driver_p = new PhantomJSDriver(phantomJSDriverService);
driver_p.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 30));
var url_p = "http://example2.com";
driver.Navigate().GoToUrl(url_p);
var title = driver.FindElements(By.CssSelector("css selector of example2.com"));
var myFirstScrape = title[0].Text;
Console.WriteLine(myFirstScrape);
Console.ReadLine();
driver_p.Quit();
}
}
}
在控制台应用程序中用于桌面的 Visual Studio Express 上。我在 40 秒内得到了很好的结果。两者都给出了 40 秒,而第一个给出了不到 12 秒的结果。
问题出在这里,在Visual Studio for Web的asp.net项目中运行基于上述的脚本时,
Visual Studio的asp.net项目中的脚本是:
using OpenQA.Selenium;
using OpenQA.Selenium.PhantomJS;
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebScraperapp
{
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
var phantomJSDriverService = PhantomJSDriverService.CreateDefaultService();
IWebDriver driver = new PhantomJSDriver(phantomJSDriverService);
driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 30));
var url = "http://www.example1.com";
driver.Navigate().GoToUrl(url);
var title = driver.FindElements(By.CssSelector("css selector of example 1"));
var myFirstScrape = title[0].Text;
Label2.Text = myFirstScrape;
driver.Quit();
}
}
}
我从上面的 asp.net 项目代码中得到的结果超过 150 秒,这对我的业务来说不合适。我一直在努力将其分解为最小 < 50 秒。
注意:如果我能在 php 脚本中获得最终输出,我会非常高兴,我不知道虚拟主机服务器上的 phantomjs,因此这个项目首选 asp.net。
删除该implicitlywait
功能后,我得到了相同的结果!
提前致谢!