L
L
lok1012021-12-23 16:51:39
Python
lok101, 2021-12-23 16:51:39

Why does Instagram bot on Selenium Python make unsubscribes "once"?

There is a Selenium Python bot, there is an unsubscribe function and it works, but for some reason it skips unsubscribes. It looks something like this:
- the bot loads the profile page and opens the subscriptions tab.
- alternately pokes the unsubscribe buttons until ten people unsubscribe.
- repeats everything again.

spoiler
Но при перезагрузке страницы оказывается что на те профили, от которых бот отписался, аккаунт до сих пор подписан. Кнопка отписки была нажата, инстаграм выдал соответствующую анимацию и кнопка стала синей, но вот сама отписка не произошла. Ничего подобного я не могу повторить если делаю всё тоже самое вручную с того же самого хрома, данна проблема возникает именно при отписке через Selenium. Проблема, частично, решается увеличением таймаута между отписками, но это не решение и это не объясняет мне причин, из за которых всё так работает.

Я приложу скрин логов, там видно, что от одного и того же профиля он отписывается по несколько раз. Прикладываю код фрагмета отписки и вот ссылка на репозиторий github, там есть код всего бота:
https://github.com/lok101/InstaBotSelenium.git
В целом, сама отписка работает, но с подобными "пробуксовками". Вы не знаете, в чём причина?


spoiler

61c47e42de0c0201919188.png
while True:
            if error_count >= error_max:
                break
            try:
                following_count = browser.find_element(
                    By.XPATH, '//main/div/header/section/ul/li[3]/a/span').text
                print(f"Количество подписок: {following_count}")
                count = 10
                browser.get(f"https://www.instagram.com/{username}/")

                time.sleep(2)
                following_button = browser.find_element(By.XPATH, "//li[3]/a")
                following_button.click()
                time.sleep(2)

                # забираем все li из ul, в них хранится кнопка отписки и ссылки на подписки
                following_div_block = browser.find_element(By.XPATH, "/html/body/div[6]/div/div/div[3]/ul/div")
                following_users = following_div_block.find_elements(By.TAG_NAME, "li")
                time.sleep(2)

                for user in following_users:
                    if not count:
                        time.sleep(sleep_between_iterations)
                        break

                    user_url = user.find_element(By.TAG_NAME, "a").get_attribute("href")
                    user_name = user_url.split("/")[-2]

                    user.find_element(By.TAG_NAME, "button").click()
                    time.sleep(random.randrange(min_sleep, max_sleep))
                    browser.find_element(By.CSS_SELECTOR, "button.-Cab_").click()

                    print(f"Итерация #{count} >>> Отписался от пользователя {user_name}")
                    count -= 1
            except NoSuchElementException:
                error_count += 1
                if error_count == error_max:
                    print(f'''
                    -----------------------------------------------------------------------------------
                    ----------- Элемент не найден, лимит перезапусков превышен, завершение. -----------
                    -----------------------------------------------------------------------------------
                           ''')
                else:
                    print(f'''
                    -----------------------------------------------------------------------------------
                    ----------- Элемент не найден, перезапуск # {error_count}. ------------------------
                    -----------------------------------------------------------------------------------
                           ''')
                time.sleep(30)
                continue



UPD: The first run always unsubscribes from all ten, and then the unsubscribes decrease. Switching timeouts has no effect.
spoiler
Количество подписок: 63
Итерация #10 >>> Отписался от пользователя shahidsabika847
Итерация #9 >>> Отписался от пользователя forta05
Итерация #8 >>> Отписался от пользователя angel198636
Итерация #7 >>> Отписался от пользователя julia88ni
Итерация #6 >>> Отписался от пользователя konstantin.shagalov
Итерация #5 >>> Отписался от пользователя 25.13romanova26.16
Итерация #4 >>> Отписался от пользователя joxa_sofiya
Итерация #3 >>> Отписался от пользователя sahynatkachenko067
Итерация #2 >>> Отписался от пользователя lenara2021
Итерация #1 >>> Отписался от пользователя alenka_kislinka
Количество подписок: 53
Итерация #10 >>> Отписался от пользователя julia88ni
Итерация #9 >>> Отписался от пользователя konstantin.shagalov
Итерация #8 >>> Отписался от пользователя 25.13romanova26.16
Итерация #7 >>> Отписался от пользователя joxa_sofiya
Итерация #6 >>> Отписался от пользователя lenara2021
Итерация #5 >>> Отписался от пользователя alenka_kislinka
Итерация #4 >>> Отписался от пользователя mamaalina80
Итерация #3 >>> Отписался от пользователя zarema_mirki
Итерация #2 >>> Отписался от пользователя bysinka_87
Итерация #1 >>> Отписался от пользователя miroshnikovu_family
Количество подписок: 49
Итерация #10 >>> Отписался от пользователя alenka_kislinka
Итерация #9 >>> Отписался от пользователя mamaalina80
Итерация #8 >>> Отписался от пользователя bysinka_87
Итерация #7 >>> Отписался от пользователя miroshnikovu_family
Итерация #6 >>> Отписался от пользователя krytiiishka
Итерация #5 >>> Отписался от пользователя neznaika3954
Итерация #4 >>> Отписался от пользователя fwzj1b_9
Итерация #3 >>> Отписался от пользователя svetik.ya1985
Итерация #2 >>> Отписался от пользователя mama_denisa_21_i_dachuli_17
Итерация #1 >>> Отписался от пользователя _777ira
Количество подписок: 43

Answer the question

In order to leave comments, you need to log in

2 answer(s)
A
ab1, 2021-12-23
@ab1

Try after clicking on the user, after page 43.
add a time.sleep of some kind)
+ On page 44 the absolute xpath is long, many elements, this is not a flexible approach,
it is possible to find a shorter xpath using attributes, for example @id, @class & .. .

P
Puma Thailand, 2021-12-24
@opium

So in the same place, run the webdriver locally and see where it sticks

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question