私は分で小さな自動化プロジェクトに取り組んでいて、レンガの壁にぶつかりました。まず、プロジェクトのこのコンポーネントにWebブラウザーを使用している唯一の理由は、スクレイピングされているサイトのコードが難読化されており、コードを表示するためにJava対応のブラウザーが必要なことです。Webクライアントを使用して機能する別のアプリがあります。他のテストサイトでは問題ありませんが、残念ながらこのターゲットでは使用できません
私の問題は、Webブラウザコントロールをプログラムで構成しようとすると発生します
私が発見した最初の問題は、コントロールのプロパティでURLを手動で設定すると、ページ1が読み込まれ、スクレーパーがそのページで機能することです。
ただし、プロパティでURLをクリアし、Form1_Loadメソッドで手動で設定しましたが、プルされた自動パラメーターが正常であり、問題なく設定されていることを確認したにもかかわらず、URLとしてabout:blankが返されます。
これが私が使っているものです:
注:
コレクションとは、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イベントを使用してリンク抽出をトリガーします。
xpathを使用して正常に選択され、再度検証されている次のページのURLを設定しようとすると、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);
いつものようにどんな助けでも大歓迎です、これは自動化するのに悪夢であることが証明されています、なぜならWebBrowserはWebClientよりもはるかに遅いだけでなく、その場で変更するのが苦痛であることを証明しているからです
よろしく
バリー