Привет, у меня есть этот селеновый скрипт (с использованием 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 для различных активных историй (не основных моментов), ссылки для загрузки самостоятельно, если вы думаете, что проблема может быть именно в этом.
пожалуйста, покажите весь свой код. что такое user_name? как вы создаете драйвер? ты слишком много упустил
Кроме того, почему вы возитесь с селеном только для того, чтобы разобрать некоторые href из содержимого?
@CoreyGoldberg Я не знаком с красивым супом и другими способами получения только тех ссылок, которые вы хотите. user_name — это строка имени этого пользователя в Instagram.
@CoreyGoldberg создает экземпляр с драйвером: options = Options() options.headless=True self.driver = webdriver.Firefox(options=options, executable_path=r'/usr/bin/geckodriver')
исполняемый файл geckodriver выполняется пользователем cron?






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