2012-07-23 48 views
1

我正在一个小型的自动化项目上工作,并且碰到了一堵砖墙。首先,我想说明我使用webbrowser这个项目的这个组件的唯一原因是网站正在被抓取有混淆的代码,并需要启用java的浏览器来显示代码,我有另一个应用程序使用webclient工作罚款等考点,但遗憾的是不能在这个目标努力编程配置WebBrowser控件时c#屏幕抓取项目 - 网页浏览器不改变url

我的问题出现使用

第一个问题我发现是,如果我手动设置在控制网址它将页面1加载并且该刮板可以用于该页面。
但是,我开始清除属性中的url,并在Form1_Load方法中手动设置它,但它返回about:blank作为url,尽管我已验证被拉入的自动参数是否正确,应该设置为无问题

以下是我正在使用的是什么:

注:
收集是指定义的XML序列化阵列
定义是指此目标的积极的定义,其用意就是为多个目标配置此

private void Form1_Load(object sender, EventArgs e) 
    { 
     PopulateScraperCollection(); 
     webBrowser1.Url = new Uri(collection.ElementAt(b).AccessUrl); 
     NavigateToUrl(collection.ElementAt(b).AccessUrl); 
    } 

    public void PopulateScraperCollection() 
    { 
     string[] xmlFiles = Directory.GetFiles(@"E:\DealerConfigs\"); 
     foreach (string xmlFile in xmlFiles) 
     { 
      collection.Add(ScraperDefinition.Deserialize(xmlFile)); 
     } 
    } 

    public void NavigateToUrl(string url) 
    { 
     Console.WriteLine(collection.ElementAt(b).AccessUrl); 
     webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted; 
     webBrowser1.Navigate(webBrowser1.Url); 
    } 

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     WebBrowser wb = sender as WebBrowser; 
     Process(collection.ElementAt(b), 0); 
     b++; 
    } 

因此,这会导致使用DocumentCompleted导航到分页结果中的另一个问题。在第一页加载我使用DocumentCompleted事件触发链接提取。
当我尝试为下一页设置url时,它正在使用xpath正确选取并再次验证,使用F10在调试中跳过表示它没有更改并且DocumentCompleted事件没有被触发

我的代码更改URL等是:

string nextPageUrl = string.Format(definition.NextPageUrlFormat, WebUtility.HtmlDecode(relativeUrl)); 
webBrowser1.Url = new Uri(nextPageUrl); 
webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted; 
webBrowser1.Navigate(webBrowser1.Url); 

一如既往是极大的赞赏任何帮助,这被证明是自动化一场噩梦,不仅是因为web浏览器是如此之比WebClient的慢得多,但其证明在飞行中改变疼痛

Regards

巴里

+0

definition.NextPageUrlFormat的值是什么? – 2012-07-23 11:23:44

+0

其目标网站网址+从网站上的“下一步”链接提取的分页元素。这正是我希望它在浏览器中对照网站检查后的结果 – BarryH1987 2012-07-23 11:38:02

回答

1

你应该从来没有真正建立webBrowser1.Url,你应该只使用导航无效,所以

private void Form1_Load(object sender, EventArgs e) 
{ 
    PopulateScraperCollection(); 
    NavigateToUrl(collection.ElementAt(b).AccessUrl); 
} 

我的猜测是,为什么它不是导航,是该collection.ElementAt( b).AccessUrl为空或约:空白

林真的不知道怎么回答你的问题,但导航空隙应该改变它

NB:WebBrowser控件是正确的废话,你ç应尝试另一个WebBrowser控件,如Awesomium或GeckoFX

+1

这是我第一次想到理查德,但我已经调试过它并将AccessUrl写入输出,它是一个有效的url,但它返回:空白..为什么它没有被拾起超越了我。我会在那里做出你的改变,希望能带来一些好运 – BarryH1987 2012-07-23 11:54:34

+0

.NET的哪个版本?我会使用4客户端版本,以确保您有最新的网页浏览器控制 – x06265616e 2012-07-23 11:56:46

+0

我使用它大声笑尝试保持尽可能最新,这是我遇到的第一件事同时搜索解决方案 – BarryH1987 2012-07-23 12:07:06