Quellcode durchsuchen

Merge branch 'koishi-production' into mediaonly-koishi

Mike L vor 3 Jahren
Ursprung
Commit
18873ddadc
2 geänderte Dateien mit 12 neuen und 10 gelöschten Zeilen
  1. 5 5
      dist/webshot.js
  2. 7 5
      src/webshot.ts

+ 5 - 5
dist/webshot.js

@@ -96,13 +96,13 @@ class Webshot extends CallableInstance {
                             });
                         }, 250);
                     }))
-                        .then(() => page.waitForSelector('xpath=//section/*/*/div[.//article/*/*/*/*/*[@role="group"]]', { timeout: getTimeout() }))
+                        .then(() => page.waitForSelector('xpath=//section/*/*/div[.//article[not(.//*[@data-testid]//time)]]', { timeout: getTimeout() }))
                         .then(handle => handle.$$('xpath=..//a[contains(@href,"content_you_see")]/../../..//*[@role="button"]')
                         .then(sensitiveToggles => {
                         const count = sensitiveToggles.length;
                         if (count)
                             logger.info(`found ${count} sensitive ${count === 1 ? 'tweet' : 'tweets'} on page, uncollapsing...`);
-                        return Promise.all(sensitiveToggles.map(toggle => toggle.click()));
+                        return utils_1.chainPromises(sensitiveToggles.filter(toggle => toggle.isVisible()).map(toggle => () => toggle.click()));
                     })
                         .then(() => handle))
                         .catch((err) => {
@@ -127,10 +127,10 @@ class Webshot extends CallableInstance {
                             }
                             catch (_a) { }
                             document.documentElement.scrollTop = 0;
-                        });
+                        }).then(() => handle);
                     })
-                        .then(() => page.evaluate(() => {
-                        const cardImg = document.querySelector('div[data-testid^="card.layout"][data-testid$=".media"] img');
+                        .then(handle => handle.evaluate(div => {
+                        const cardImg = div.querySelector('div[data-testid^="card.layout"][data-testid$=".media"] img');
                         if (typeof (cardImg === null || cardImg === void 0 ? void 0 : cardImg.getAttribute('src')) === 'string') {
                             const match = /^(.*\/card_img\/(\d+)\/.+\?format=.*)&name=/.exec(cardImg === null || cardImg === void 0 ? void 0 : cardImg.getAttribute('src'));
                             if (match) {

+ 7 - 5
src/webshot.ts

@@ -123,13 +123,14 @@ class Webshot extends CallableInstance<[Tweets, (...args) => void, number], Prom
                 });
               }, 250);
             }))
-            .then(() => page.waitForSelector('xpath=//section/*/*/div[.//article/*/*/*/*/*[@role="group"]]', {timeout: getTimeout()}))
+            // find main tweet
+            .then(() => page.waitForSelector('xpath=//section/*/*/div[.//article[not(.//*[@data-testid]//time)]]', {timeout: getTimeout()}))
             // toggle visibility of sensitive tweets
             .then(handle => handle.$$('xpath=..//a[contains(@href,"content_you_see")]/../../..//*[@role="button"]')
               .then(sensitiveToggles => {
                 const count = sensitiveToggles.length;
                 if (count) logger.info(`found ${count} sensitive ${count === 1 ? 'tweet' : 'tweets'} on page, uncollapsing...`);
-                return Promise.all(sensitiveToggles.map(toggle => toggle.click()));
+                return chainPromises(sensitiveToggles.filter(toggle => toggle.isVisible()).map(toggle => () => toggle.click()));
               })
               .then(() => handle)
             )
@@ -153,10 +154,11 @@ class Webshot extends CallableInstance<[Tweets, (...args) => void, number], Prom
                   }
                 } catch {/* handle errors like none-found cases */}
                 document.documentElement.scrollTop = 0;
-              });
+              }).then(() => handle);
             })
-            .then(() => page.evaluate(() => {
-              const cardImg = document.querySelector('div[data-testid^="card.layout"][data-testid$=".media"] img');
+            // scrape card image from main tweet
+            .then(handle => handle.evaluate(div => {
+              const cardImg = div.querySelector('div[data-testid^="card.layout"][data-testid$=".media"] img');
               if (typeof cardImg?.getAttribute('src') === 'string') {
                 const match = /^(.*\/card_img\/(\d+)\/.+\?format=.*)&name=/.exec(cardImg?.getAttribute('src'));
                 if (match) {