Скрипт Python selenium странно работает с Crontab в Linux

Привет, у меня есть этот селеновый скрипт (с использованием firefox и geckodriver на Raspian), который в основном использует внешний сайт для загрузки активных историй для любого пользователя в Instagram:

def download_user_stories(self, user_name):
        driver = self.driver


        driver.get("https://storiesig.com/stories/"+user_name)
        time.sleep(2)



        for i in range(1,50):
            try:
                xpath = "//div[@class='jsx-1407646540 container']//article[" + str(i) + "]//div[3]//a[1]"
                print(xpath)
                link_location = driver.find_element_by_xpath(xpath)
                link = link_location.get_attribute('href')


                current_time = datetime.datetime.now()
                corrected_time = current_time.strftime("%Y-%b-%d")

                if '.mp4' not in link: 
                    extension = '.jpg'
                else:
                    extension = '.mp4' 

                location = '/Users/"my name"/desktop/'+ user_name + '/' + corrected_time + '-' + str(i) + extension

                print (location) 

                urllib.urlretrieve(link,location)

            except Exception as e:
                print("went to except")
                print (e)
                break

Сначала я запускал его через терминал, и он работал нормально. Затем я запланировал это через crontab на raspberry pi, и он запустился, выводя ошибки в текстовый файл, и я получаю это:

working on "friends name" now
//div[@class='jsx-1407646540 container']//article[1]//div[3]//a[1]
/home/pi/Desktop/InstaScraper/Script/"friends name"/2019-Feb-21-1.jpg
//div[@class='jsx-1407646540 container']//article[2]//div[3]//a[1]
went to except
Message: Unable to locate element: //div[@class='jsx-1407646540 container']//article[2]//div[3]//a[1]

Таким образом, он находит первую ссылку для загрузки, но не может найти остальные, хотя я подтвердил, что для этого конкретного пользователя было больше для загрузки. Я также подтвердил что элемент, который он не может найти в конце, является ТОЧНО XPath следующего элемента для загрузки. Поэтому я сбит с толку, почему он не находит историю именно там, где она должна быть. Странно то, что он больше не работает нормально через терминал, хотя изначально он работал. Я не понимаю, что изменилось или почему это не работает в crontab, как в терминале.

Еще одно интересное замечание: он правильно загружает все ссылки для первого пользователя в User_Name_List.txt, но не для остальных. (функция вызывается в цикле из другой функции в классе, в котором есть список имен пользователей)

Я гуглил это и думал об этом, и я просто не могу понять, что здесь не так.

Любая помощь и объяснение будут оценены.

Примечание — вы можете зайти на storyig.com и проверить относительную систему XPath для различных активных историй (не основных моментов), ссылки для загрузки самостоятельно, если вы думаете, что проблема может быть именно в этом.

Вы хотите оставить jsx-1407646540 вне своего xpath, они изменятся, когда он передислоцирует.

pguardiario 23.02.2019 02:23

пожалуйста, покажите весь свой код. что такое user_name? как вы создаете драйвер? ты слишком много упустил

Corey Goldberg 23.02.2019 02:51

Кроме того, почему вы возитесь с селеном только для того, чтобы разобрать некоторые href из содержимого?

Corey Goldberg 23.02.2019 02:52

@CoreyGoldberg Я не знаком с красивым супом и другими способами получения только тех ссылок, которые вы хотите. user_name — это строка имени этого пользователя в Instagram.

Crunk_Cat 23.02.2019 19:06

@CoreyGoldberg создает экземпляр с драйвером: options = Options() options.headless=True self.driver = webdriver.Firefox(options=options, executable_path=r'/usr/bin/geckodriver')

Crunk_Cat 23.02.2019 19:07

исполняемый файл geckodriver выполняется пользователем cron?

Corey Goldberg 27.02.2019 16:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
87
1

Ответы 1

переключение с относительных XPath на абсолютные XPath решило эту проблему.

Другие вопросы по теме