При загрузке cookies через selenium (vk.com) ошибка "too many redirects". Python
Есть учебный код для изучения selenium
import pickle
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
class Driver:
def __init__(self, driver):
self.browser = driver
print("Инициализован драйвер Firefox")
def open_page(self, page:str):
self.browser.get(page)
print(f"Открыта страница {page}")
def reload_page(self):
self.browser.refresh()
def make_screenshot(self, filename:str):
self.browser.save_screenshot(filename)
print(f"Sreenshot saved in {filename}")
def click_element(self, class_name:str):
self.element = self.browser.find_element(By.CLASS_NAME, class_name)
self.element.click()
def input_keys(self, text):
self.element.send_keys(text)
def quit(self):
print("Goodbye!")
self.browser.quit()
class Cookies():
def __init__(self, driver):
self.browser = driver
def save_cookies(self):
return self.browser.get_cookies()
def load_cookies(self, cookie):
self.browser.add_cookie(cookie)
if __name__== "__main__":
Firefox = webdriver.Firefox()
Firefox.set_window_size(535, 730)
Browser = Driver(Firefox)
Cookies = Cookies(Firefox)
Browser.open_page("https://vk.com")
files = os.walk("./")
coockies_not_exists = True
for value in list(files)[0][2]:
if value == 'vk_cookies.pkl':
print("Файл cookies найден!")
coockies_not_exists = False
for cookie in pickle.load(open("vk_cookies.pkl", "rb")):
Cookies.load_cookies(cookie)
Browser.reload_page()
break
if coockies_not_exists:
input("Файл coockies не найден...\nАвторизуйтесь и нажмите enter. ")
pickle.dump(Cookies.save_cookies(), open("vk_cookies.pkl", "wb"))
Browser.quit()
Первая загрузка страницы работает, все загружается и куки сохраняются в папку со скриптом, ошибки нет. 2 же запуск работает до полной загрузки страницы (Куки загрузились, в аккаунт вошел), но после сразу ошибка "Too many redirects".
Текст ошибки:
Инициализован драйвер Firefox
Открыта страница https://vk.com
Файл cookies найден!
Traceback (most recent call last):
File "/home/pixart/projects/python/selenium/main.py", line 68, in <module>
Browser.reload_page()
File "/home/pixart/projects/python/selenium/main.py", line 18, in reload_page
self.browser.refresh()
File "/home/pixart/projects/python/selenium/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 570, in refresh
self.execute(Command.REFRESH)
File "/home/pixart/projects/python/selenium/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 347, in execute
self.error_handler.check_response(response)
File "/home/pixart/projects/python/selenium/venv/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 229, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Reached error page: about:neterror?e=redirectLoop&u=https%3A//vk.com/&c=UTF-8&d=Firefox%20has%20detected%20that%20the%20server%20is%20redirecting%20the%20request%20for%20this%20address%20in%20a%20way%20that%20will%20never%20complete.
Stacktrace:
RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:189:5
UnknownError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:768:5
checkReadyState@chrome://remote/content/marionette/navigate.sys.mjs:58:24
onNavigation@chrome://remote/content/marionette/navigate.sys.mjs:324:39
emit@resource://gre/modules/EventEmitter.sys.mjs:154:20
receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent.sys.mjs:33:25
Он же загрузил страницу, все показывается, а потом резко ошибка... Защита от ботов? Firefox, linux, python 3.10.
Ответы (1 шт):
Скорее всего, это защита от ботов. Я пытался войти в свой ВК аккаунт, используя cookies, через chromedriver. Однако получал то же, что вы описали. Сначала загружалась страница входа, затем добавлялись cookies (я даже предварительно удалил cookies перед этим, чтобы наверняка всё почистить). После этого я вошёл в аккаунт - начала загружаться страница новостей ВК моего аккаунта. В dev tools -> network было видно, как загружались файлы (с кодом 200 - ОК), но внезапно увидел следующее:

По каким-то причинам ВК переадресует для выхода из аккаунта (параметр act=logout), и происходит конлфикт cookies с ВК. Либо проблема с cookies (что вряд ли), либо ВК блокирует ботов (высокая вероятность).
Но есть другой способ с chrome - использовать selenium через ваш профиль google chrome, это описано здесь: https://stackoverflow.com/a/31063104/18136264