採集目標頁面內容位於多層 Iframe 中(如 Page > Iframe1 > Iframe2),需穿透層層獲取/修改內容。
Spider Studio (GDT 采集工作站) + 內建 jQuery 風格選擇器 API。
Default.SelectSingleNode(selector):選擇元素.Contents():進入 Iframe 內部文檔.Html() / .Text():獲取 HTML/文本.Attr(name, value):設置屬性var iframe1 = Default.SelectSingleNode("#result iframe").Contents().SelectSingleNode("body");
if (!iframe1.IsEmpty()) MessageBox.Show(iframe1.Html());
var iframe2 = Default.SelectSingleNode("#result iframe")
.Contents().SelectSingleNode("iframe")
.Contents().SelectSingleNode("body");
if (!iframe2.IsEmpty()) MessageBox.Show(iframe2.Html());
var iframe2Elem = Default.SelectSingleNode("#result iframe").Contents().SelectSingleNode("iframe");
iframe2Elem.Attr("src", "https://www.gdtsearch.com"); // 頁面跳轉
若 Iframe 頁面與父頁面不同域,瀏覽器同源策略阻止訪問 .Contents(),會拋出安全異常。此為瀏覽器原生限制,無法繞過。
public void IFrameReady(JQueryContext iframe, string jqExpr) {
while (Default.Available) {
var contents = iframe.Contents();
if (!contents.IsEmpty()) {
var node = contents.SelectSingleNode(jqExpr);
if (!node.IsEmpty() && node.Html().Trim().Length > 10) return;
}
Thread.Sleep(1000);
Application.DoEvents();
}
}
輪詢檢查目標選擇器是否可選中且內容非空。