正しく理解する必要があります - この問題には次のアクセサリがあります。
- スクロール時にアクティブになる遅延ローダーのあるページがあります
- Lazy loader は JavaScript によって処理されます
- 100% ロードされるページの最後に、有効にする必要があるボタンが表示されます。
以下は、私が書き込もうとした例です。
_WebContent.wbThread1.Focus();
int length = 100;
new Thread(() =>
{
for (int i = 0; i <= length; i++)
{
System.Windows.Forms.SendKeys.Send("{PGDN}");
Thread.Sleep(new TimeSpan(0, 0, 3));
st.Start();
}
}).Start();
すべて順調に進んでいますが、イベント SendKey の処理に問題があります。イベントのリージョンにフォーカスする必要があり、フォーカスが失われた場合は何も消費しません。
MSDN で情報を探し始めたところ、スクロールの処理に非常に興味深いものを見つけました。
_WebContent.wbThread1.Document.Body.ScrollIntoView (true) / / allows scrolling to the top
_WebContent.wbThread1.Document.Body.ScrollIntoView (false) / / allows scrolling to the bottom
_WebContent.wbThread1.Document.Body.ScrollLeft = 100, / / sets the offset to the left
_WebContent.wbThread1.Document.Body.ScrollTop = 100, / / sets the upward shift
var rect = _WebContent.wbThread1.Document.Body.ScrollRectangle; / / returns the current position
この機能の組み合わせは役に立ちませんでした。理論的にはコードは機能しますが、実際にはこの例では成功しませんでした。
スクロールを処理した後のイベントで、次のようなものを実行します。
HtmlElementCollection _HtmlElementCollect = _WebContent.wbThread1.Document.GetElementsByTagName("A");
foreach (HtmlElement link in _HtmlElementCollect)
{
if (link.InnerText.Equals("Load More..."))
link.InvokeMember("Click");
}
どのような提案がありますか? このスクロールをどのように行うことができますか?