我正在嘗試使用Puppeteer自動上傳圖片到imgur。我已經成功實作了上傳,但現在我想獲得上傳圖片的原始圖片 URL。
為了做到這一點,我檢查了html,發現上傳的圖片顯示在一個div中,該div有以下標記。
<div class="postContent-imageWrapper-rounded">
<img src="https://i.imgur.com/ZOQgT6A.png">/span>
</div>/span>
因此,為了獲得這一點,我寫了一些puppeteer代碼,如下所示。
const browser = await puppeteer.launch({ headless: false, args: ['-no-sandbox', '-disable-setuid-sandbox'] });
const page = await browser.newPage();
await page.goto(request.query.url)。
let imgPath = nanoid() ".png"
await page.screenshot({ path: imgPath }) 。
//imgur圖片上傳。
const pg = await browser.newPage()。
pg.on("console", (consoleObj) => /span> {
if (! ['warning','error'].includes(consoleObj.type()) {
console.log(consoleObj.text() )。)
}
})
await pg.goto("https://imgur.com/upload") 。
const elementHandle = await pg.$("input[type=file]") 。
await elementHandle.uploadFile(imgPath)。
await pg.waitForTimeout(5000)
await pg.waitForSelector(' .PostContent-imageWrapper-rounded')
let imgSrc = await pg.evaluation(function() {
let dd = "undefined"/span>;
while (dd =="undefined" || dd[0] =="undefined") {
dd = document.getElementsByClassName("postContent-imageWrapper-rounded")
}
return dd[0].firstChild.src //不時地得到不同的錯誤。
})
console.log(imgSrc)
await browser.close()。
fs.unlink(imgPath, (err) => {
if (err) {
console.error(err)
return。
}
})
然而,這段代碼在注釋所示的行中失敗了,拋出了以下錯誤。
評估失敗。TypeError。無法讀取未定義的屬性 (讀取'firstChild') at puppeteer_evaluation_script:3:18
但是當我在evaluate函式內執行相同的JS代碼時,在瀏覽器中,它可以作業并回傳圖片的原始URL。因此,我真的很沮喪,為什么這不起作用呢?
你能給我一些建議來克服這個問題并順利復制原始圖片的URL嗎?謝謝你的時間。
uj5u.com熱心網友回復:
let dd = "undefined"/span>。
while (dd =="undefined" || dd[0] =="undefined") {
dd = document.getElementsByClassName("postContent-imageWrapper-rounded")
}
這個回圈阻塞了事件回圈,阻止了DOM的更新。所以也許可以嘗試這樣做:
await pg.waitForSelector(' .PostContent-imageWrapper-rounded > img') 。
let imgSrc = await pg.evaluation(function() {
let img = document.querySelector('.PostContent-imageWrapper-rounded > img') 。
return img.src。
});
console.log(imgSrc)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/320434.html
標籤:

