Почему мой скрипт для открытия изображений из поста в Instagram на новых вкладках имеет неопределенные ошибки, когда не выполняется с первого изображения? - PullRequest
0 голосов
/ 09 июня 2019

Я делаю все это с помощью блокнота Firefox. Скрипт работает нормально, когда я запускаю его, глядя на первое изображение, в противном случае он говорит «Exception: TypeError: curr is undefined» в строке 82 (цикл while, который проходит через дочерние узлы), и я пытаюсь выяснить, почему мой функция, которая должна «сбрасывать», она не работает. Я также заметил, что если я использую baseState и openTabs из консоли, это работает, но не с нуля.

Я попытался запустить его в консоли, и это работает, но цель в том, чтобы иметь возможность использовать его как расширение, а не запускать его из консоли, чтобы он не работал. Я посмотрел его, и там был похожий пост, но был сценарий, который не позволял бы вам открывать новые вкладки с определенных сайтов, поэтому они сказали установить среду для браузера, но это не сработало для меня, что имеет смысл, так как это не так. т применяется. Кроме того, я написал функцию «reset» (baseState), которая возвращает вас к первому изображению, но опять же не работает, если только вы не делаете это в консоли.

    //next button class is _6CZji
    //back button class is POSa_
    //img class is FFVAD
    //video class is tWeCl
    //commented out some parts I don't think are relevant to shorten it up


    function baseState()
    {
       //sees if there's a back button or only one picture, clicks back until at start and returns true if there's only one picture
    }

    function openTabs()
    {

        let onePic = baseState(); //the reset
        if(onePic)
        {
            //if only one pic/video put that up
        }
        else
        {
            //get the list of all elements
            let ul = document.getElementsByClassName("YlNGR")[0];

           //get everything in the list (incomplete for now)
            let items = Array.from(ul.childNodes);

            //go through every item in the list (as it grows it'll take account of that and go farther)
            for(let i = 0; i < items.length; i++)
            {
                //get all items right now
                let newItems = Array.from(ul.childNodes);   

                //if any of the new items aren't in the old array add them
                newItems.forEach(item => {
                    if(!items.includes(item))
                        items.push(item);
                });

                //if it's not the last element, go to next
                if(i < items.length - 1)
                {
                    const button = document.getElementsByClassName("_6CZji")[0];
                    button.click();
                }
            }


            items.forEach((item) => {
                i++;
                //temporary variable
                let curr = item;

                //until you reach the image/video, go to the next child node
                /*
                LINE BELOW THIS HAS THE ERROR
                */
                while(curr.nodeName != "IMG" && curr.nodeName != "VIDEO")
                {
                    let arr = Array.from(curr.childNodes);
                    curr = curr.childNodes[0];
                }

                //once you reach the image, open it
                window.open(curr.src, "_blank")
            });
        }
    }

    openTabs();

Предполагается открыть вкладку для каждого изображения / видео в сообщении, независимо от того, какое изображение я смотрю при запуске. Ошибка, которую он дает в блокноте: /* Exception: TypeError: curr is undefined openTabs/<@Scratchpad/7:82:19 openTabs@Scratchpad/7:75:15 @Scratchpad/7:95:1 */ Если вы хотите проверить это, вам нужно убедиться, что у вас есть только открытая запись, поэтому выберите публикацию в Instagram и обновите страницу, тогда она будет открыта только (не канал / профиль)

...