對編碼非常陌生,這就是為什么這個問題可能很容易回答的原因,但是在掃描互聯網 2 天之后仍然沒有真正的解決方案,我想我只是在這里問。
所以,正如標題所解釋的,我在一個網站中有一個 iframe,我想用一個 id 屬性(我們稱之為iframeid),在這個 iframe 內的某個地方,我有一個帶有 class 屬性的 div 容器(我們將稱之為它divclass ) 包含 - 除了其他元素 - 多個<a>標簽。我的目標是獲得一個陣列,其中<a>列出了來自這些標簽的所有鏈接,到目前為止,我僅通過研究和一點運氣實作了以下目標:
const elementHandle = await page.waitForSelector('iframe#iframeid');
const frame = await elementHandle.contentFrame();
await frame.waitForSelector('div[class=divclass] a');
var x = 2; //a var to determine which a tag I want
const oneA= await frame.$('div[class=entryLayer] a:nth-child(' x ')');
const link = await (await oneA.getProperty('href'))._remoteObject.value;
console.log(link);
它的作用是獲取一個變數并拉取其相應<a>標簽的鏈接,但我不知道如何將其放入回圈中,除此之外,<a>標簽的數量各不相同,這使得我甚至可以在回圈中進行編碼更難。
甚至不能完全排除回圈嗎?我發現了類似的 stackoverflow 問題,但例如一個只有一個<a>標簽,似乎完全改變了代碼。
最后,我只想要一段我作為新手可以理解但同時又相當緊湊的作業代碼。感謝您提前提供幫助!
編輯
我在評論的幫助下的解決方案:
const elementHandle = await page.waitForSelector('iframe#iframeid');
const frame = await elementHandle.contentFrame();
const thisDiv = await frame.waitForSelector('div[class=divclass]');
const xpath_expression = '//a[@href]';
await page.waitForXPath(xpath_expression);
const links = await thisDiv.$x(xpath_expression);
const link_urls = await thisDiv.evaluate((...links) => {
return links.map(e => e.href);
}, ...links);
console.log(link_urls);
雖然它確實拉出了一些奇怪的其他鏈接,但我只是要正常過濾掉它們。
uj5u.com熱心網友回復:
據我所知,每個 iframe 都可以被視為不同的頁面。這是我用于相同型別任務的參考https://stackoverflow.com/a/54940865/17755263
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/392296.html
標籤:javascript 节点.js 网页抓取 内嵌框架 傀儡师
