Python + Selenium

Discussion in 'Python' started by SLEHI, 6 Jul 2022.

  1. SLEHI

    SLEHI New Member

    Joined:
    19 May 2021
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Всем здрасьте задался такой вот задачкой, нужно скачать все видосы с ВК которые когда-либо были отправлены в ЛС, сделать это довольно таки просто если бы их была парочка, то можно было бы просто ручками, но их хер знает сколько...
    Так вот разобравшись немного стало понятно как формируются ссылки на эти видосы и как имея доступ к самому видосу его можно скачать. Проблема заключается только в том, что для получения заветной ссылки на скачивание видоса в виде файла нужно авторизоваться в ВК, иначе ничего не получится(это чисто из-за приватности и конфиденциальности, что только отправитель может смотреть видосы переходя по ссылке).
    Как итог подумал авторизоваться в ВК через Selenium и потом уже получать заветные ссылки и сохранять файлы. НО тут вторая проблема я могу захотеть еще что-нибудь сделать через Selenium или по несколько прогнать скрипт если, понадобится и постоянно проходить ручную(двойная аутентификация все дела) авторизацию не комильфо, поэтому я решил авторизовываться используя cooke. Протестировал код ниже на другом форуме все работает нормально (Сначала вручную авторизовался за выделенные 25 секунд, потом сделал дамп печенек и работал уже только с ним)
    Code:
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from webdriver_manager.chrome import ChromeDriverManager
    import time
    import pickle
    
    options = webdriver.ChromeOptions()
    
    options.add_argument("--disable-blink-features=AutomationControlled")
    # options.add_argument("")
    
    options.add_argument("user-agent=Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0")
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),
                              options=options
                              )
    try:
    
        url = "https://www.cyberforum.ru/log-in.php"
    
        # driver.get(url)
        # time.sleep(25)
        # pickle.dump(driver.get_cookies(), open(f"cookies", "wb"))
    
        driver.get(url)
        time.sleep(5)
    
        for cookie in pickle.load(open(f"cookies", "rb")):
            driver.add_cookie(cookie)
    
    
    
        time.sleep(5)
        driver.refresh()
        time.sleep(15)
    
    except Exception as ex:
        print(ex)
    finally:
        driver.close()
        driver.quit()
    
    Потом же попробовал выцепить cookie и добавить их по другому, а именно так:
    Code:
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from webdriver_manager.chrome import ChromeDriverManager
    import time
    
    options = webdriver.ChromeOptions()
    
    options.add_argument("--disable-blink-features=AutomationControlled")
    
    options.add_argument("user-agent=Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0")
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),
                              options=options
                              )
    try:
        url = "https://www.cyberforum.ru/"
        driver.get(url)
    
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'httpOnly': False, 'name': 'cfdup_timestamp', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'httpOnly': True, 'name': 'cfsessionhash', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1688598045, 'httpOnly': True, 'name': 'cfpassword', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'httpOnly': False, 'name': 'PHPSESSID', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.cyberforum.ru', 'expiry': 1688598028, 'httpOnly': False, 'name': 'FCNEC', 'path': '/', 'secure': False, 'value': '[["что-то там"],null,[]]'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1659654026, 'httpOnly': False, 'name': 'pg_ip', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.cyberforum.ru', 'expiry': 1657148448, 'httpOnly': False, 'name': '_gid', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.cyberforum.ru', 'expiry': 1657134026, 'httpOnly': False, 'name': '_ym_isad', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1657065645, 'httpOnly': False, 'name': 'vbseo_loggedin', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.cyberforum.ru', 'expiry': 1688598025, 'httpOnly': True, 'name': '__ddg1_', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1657148426, 'httpOnly': False, 'name': 'pg_tc', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1659654026, 'httpOnly': False, 'name': 'pg_custom_timeout', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1688598026, 'httpOnly': False, 'name': 'pg_mm2_cookie_a', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'httpOnly': False, 'name': 'pg_geo', 'path': '/', 'secure': False, 'value': '{"что-то там"})'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1688598045, 'httpOnly': True, 'name': 'cfuserid', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1657148426, 'httpOnly': False, 'name': 'pg_geo_response_time', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1657148426, 'httpOnly': False, 'name': 'pg_after_init_response_time', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1688598025, 'httpOnly': False, 'name': 'cflastvisit', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1657148426, 'httpOnly': False, 'name': 'pg_preconnecting', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1657065626, 'httpOnly': False, 'name': 'pg_session_depth', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.cyberforum.ru', 'expiry': 1688598026, 'httpOnly': False, 'name': '_ym_uid', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1659654026, 'httpOnly': False, 'name': 'pg_beacon', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1657065645, 'httpOnly': False, 'name': 'pg_canonical_session', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1657148426, 'httpOnly': False, 'name': 'pg_unq_cohort_key', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.cyberforum.ru', 'expiry': 1720134048, 'httpOnly': False, 'name': '_ga', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.cyberforum.ru', 'expiry': 1688598026, 'httpOnly': False, 'name': '_ym_d', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.cyberforum.ru', 'expiry': 1657062086, 'httpOnly': False, 'name': '_gat_gtag_UA_595018_2', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1657065626, 'httpOnly': False, 'name': 'pg_session_id', 'path': '/', 'secure': False, 'value': 'что-то там})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1657065626, 'httpOnly': False, 'name': 'pg_buildfile', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'www.cyberforum.ru', 'expiry': 1688598045, 'httpOnly': False, 'name': 'cflastactivity', 'path': '/', 'secure': True, 'value': 'что-то там'})
    
    
        driver.get("https://www.cyberforum.ru/vb-net/thread3005667.html")
    
        time.sleep(5)
        driver.get("https://www.cyberforum.ru/python-tasks/")
    
        time.sleep(5)
        driver.get("https://www.cyberforum.ru/python-tasks/thread3005141.html")
    
        time.sleep(5)
        driver.refresh()
        time.sleep(15)
    
    except Exception as ex:
        print(ex)
    finally:
        driver.close()
        driver.quit()
    
    После чего попробовал сделать тоже самое, но уже с ВК, все те же действия и код, за исключением ссылок и cookie файла. И тут уже интересно, спустя около секунды после загрузки печенек вылетает ошибка "ERR_TOO_MANY_REDIRECTS", если делать это используя файл дампа, а если прописать печеньки таким образом:
    Code:
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from webdriver_manager.chrome import ChromeDriverManager
    import time
    
    options = webdriver.ChromeOptions()
    
    options.add_argument("--disable-blink-features=AutomationControlled")
    
    options.add_argument("user-agent=Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0")
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),
                              options=options
                              )
    try:
        url = "https://vk.com"
    
        driver.add_cookie({'domain': 'vk.com', 'expiry': 1657149644, 'httpOnly': False, 'name': 'tmr_detect', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1685834441, 'httpOnly': False, 'name': 'tmr_reqNum', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1688814007, 'httpOnly': True, 'name': 'remixdmgr', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1657077637, 'httpOnly': True, 'name': 'remixdmgr_tmp', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1688129520, 'httpOnly': True, 'name': 'remixsid', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1688556536, 'httpOnly': True, 'name': 'remixuas', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1685834441, 'httpOnly': False, 'name': 'tmr_lvidTS', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1659655239, 'httpOnly': False, 'name': 'remixflash', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1688599239, 'httpOnly': False, 'name': 'remixscreen_depth', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1688599240, 'httpOnly': False, 'name': 'remixdark_color_scheme', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1688599221, 'httpOnly': False, 'name': 'remixdt', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'vk.com', 'expiry': 1688173972, 'httpOnly': True, 'name': 'remixnsid', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1657668021, 'httpOnly': False, 'name': 'remixgp', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1685834441, 'httpOnly': False, 'name': 'tmr_lvid', 'path': '/', 'secure': False, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1688599239, 'httpOnly': False, 'name': 'remixscreen_winzoom', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1688599239, 'httpOnly': False, 'name': 'remixscreen_height', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1657668039, 'httpOnly': False, 'name': 'remixscreen_orient', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1688599239, 'httpOnly': False, 'name': 'remixscreen_dpr', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1659655241, 'httpOnly': False, 'name': 'remixseenads', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1688599239, 'httpOnly': False, 'name': 'remixscreen_width', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1689053169, 'httpOnly': False, 'name': 'remixua', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1688599220, 'httpOnly': False, 'name': 'remixstlid', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1689013485, 'httpOnly': False, 'name': 'remixstid', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1688599240, 'httpOnly': False, 'name': 'remixcolor_scheme_mode', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1657149620, 'httpOnly': False, 'name': 'remixbdr', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': 'vk.com', 'expiry': 1688453271, 'httpOnly': True, 'name': 'remixluas2', 'path': '/', 'secure': True, 'value': 'что-то там'})
        driver.add_cookie({'domain': '.vk.com', 'expiry': 1688118792, 'httpOnly': False, 'name': 'remixlang', 'path': '/', 'secure': False, 'value': 'что-то там'})
    
        time.sleep(5)
        driver.refresh()
        time.sleep(15)
    
    except Exception as ex:
        print(ex)
    finally:
        driver.close()
        driver.quit()
    
    тогда у этой ошибки не будет и вообще ничего не будет потому что уже сам интерпретатор скажет:
    Message: invalid cookie domain
    (Session info: chrome=103.0.5060.66)
    Stacktrace:
    Backtrace:
    Используемые библиотеки:
    selenium==4.2.0
    Webdriver-Manager==3.7.0
    Буду благодарен если кто-то подскажет как все таки авторизоваться в ВК через Selenium используя cookie. Есть подозрения что что-то не так с cookie, точнее с тем как Selenium их пытается воспринимать, но вот я хз в интернете инфы не нашел на эту тему.
     
  2. Proxy-Lab

    Proxy-Lab New Member

    Joined:
    25 May 2022
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Привет. Нашёл немного инфы на StackOverflow. Может, это тебе как-то поможет

    proxy-lab.ru
     
  3. SLEHI

    SLEHI New Member

    Joined:
    19 May 2021
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    К сожалению это не сработает, так как примерно так я и загружаю cookie, тут как я понимаю есть некий конфликт в них.
    Наткнулся на одно обсуждение от 16 года, и там было что-то похожее, как я понял со стороны ВК давались одинаковые cookie которые конфликтовали между собой в автоматическом порядке внедрения, а если на повседневной то, было все нормально и браузер выбирал те cookie у которых срок жизни был дольше. Но тут я не вижу прям чтобы были одинаковые cookie, но возможно есть что-то подобное, но я хз...
     
  4. 4Fun

    4Fun Elder - Старейшина

    Joined:
    25 Jul 2018
    Messages:
    496
    Likes Received:
    708
    Reputations:
    11
    Насколько мне известно, ВКонтакте хранит некоторые куки, связанные с авторизацией, на домене login.vk.com. Также попробуйте использовать данные из Local storage браузера.