使用GeckoBrowser导航到多个URL

时间:2019-06-08 15:41:05

标签: c# wpf gecko geckofx

我正在尝试浏览URL列表,并通过GeckoBrowser从网页中获取一些内容。问题在于OnDocumentCompleted可能位于其他线程上,并且for循环不会停止,因此它会继续运行

我尝试使用多个浏览器进行重构,但是没有用

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<link href="//cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel="stylesheet"/>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="//cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>

<div class="container-fluid">
  <div class="row">
    <div class="col-md-12">
      <table id="tblTest">
        <thead>
          <tr>
            <th>Col1</th>
            <th>Col2</th>
            <th>Col3</th>
            <th>Col4</th>
            <th>Col5</th>
            <th>Col6</th>
            <th>Col7</th>
            <th>Col8</th>
            <th>Col9</th>
            <th>Col10</th>
            <th>Col11</th>
            <th>Col12</th>
            <th>Col13</th>
            <th>Col14</th>
            <th>Col15</th>
            <th>Col16</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>some data</td>
            <td>some data</td>
            <td>
<div class="btn-group">
  <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Action <span class="caret"></span>
  </button>
  <ul class="dropdown-menu">
    <li><a href="#">Action</a></li>
    <li><a href="#">Another action</a></li>
    <li><a href="#">Something else here</a></li>
    <li role="separator" class="divider"></li>
    <li><a href="#">Separated link</a></li>
  </ul>
</div>
            </td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
</div>

因此从上面的代码中,我希望for循环在继续之前会等待OnDocumentCompleted事件。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您是对的,DocumentCompleted事件不会阻止您的for循环。在您编写的OnDocumentCompleted()方法内部,而不是使用for循环,而是从站点中获取所需的数据,然后将Navigate()移至列表中的下一个URL。

此外,如果您只是尝试下载Web数据,除非该网站真的很复杂并且使用javascript渲染内容,否则浏览器会显得过大。如果您只是尝试从网站中获取简单的html,请使用WebClient :

string html = new WebClient().DownloadString("https://www.google.com");

WebClient.DownloadString()方法确实会阻止,因此您可以按照上面的意图在for循环中使用它。