Duff89 / proxy_use_example_for_parsing

3 примера использования прокси в Python
3 stars 1 forks source link

Прокси не меняется , браузер не переходит на страницу #2

Open Anton32reg opened 1 year ago

Anton32reg commented 1 year ago

Здравствуй! Мой код


from seleniumwire import undetected_chromedriver as uc
import time

def proxy_line(file):
    with open(file, 'r+') as f:
        lines = f.readlines()
        if len(lines) > 0:
            proxy = lines[0].strip()
            f.seek(0)
            f.writelines(lines[1:])
            f.truncate()
            return proxy
        else:
            return None

options = uc.ChromeOptions()
options.binary_location = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'
driver = uc.Chrome(options=options)
wire_options = proxy_line('D:\\pycharmProjects_1\\projects\\proxy_list.txt')

try:
    driver = uc.Chrome(version_main=108, seleniumwire_options=wire_options)
    driver.get("https://whoer.net/ru")
except Exception as ex:
    print(ex)
finally:
    time.sleep(100)
    driver.close()
    driver.quit()
``` `

проблема в том, что при запуске кода, браузер не переходит на заданную страницу, и, после ручного перехода я вижу что прокси не изменился. :(
Duff89 commented 1 year ago

1) В uc не нужно передавать путь к бинарнику, он его сделает сам options.binary_location = 'C:\Program Files\Google\Chrome\Application\chrome.exe' достаточно указать версию Chrome, которая установлена в системе (в примере 108): driver = uc.Chrome(version_main=108, seleniumwire_options=wire_options) 2)Прокси задается не так: wire_options = proxy_line('D:\pycharmProjects_1\projects\proxy_list.txt') а так: wire_options = { 'proxy': { 'https': f'https://X7FiXtGT:V5xWAQSP@146.19.110.223:64304', } }

Anton32reg commented 1 year ago
  1. В uc не нужно передавать путь к бинарнику, он делает сам options.binary_location = 'C:\Program Files\Google\Chrome\Application\chrome.exe' достаточно указать версию Chrome, которая установлена ​​в системе (в понимании 108): driver = uc.Chrome(version_main=108, seleniumwire_options=wire_options) 2)Прокси задается не так: wire_options = proxy_line('D:\pycharmProjects_1\projects\proxy_list.txt') а так: wire_options = { 'proxy': { 'https ':f' https://X7FiXtGT:V5xWAQSP@146.19.110.223:64304 ', } }

Да, это частично решило мою проблему, но всё равно код работает не так, как ожидается, а именно: открывает два браузера, первый на приветственной странице а второй на заданной, должен открываться один и переходить по заданной ссылке, то есть второй. ВТорая проблема, сайт не грузится, ошибка ERR_TUNNEL_CONNECTION_FAILED, но прокси рабочие

from seleniumwire import undetected_chromedriver as uc
import time

def proxy_line(file):
    with open(file, 'r+') as f:
        lines = f.readlines()
        if len(lines) > 0:
            proxy = lines[0].strip()
            f.seek(0)
            f.writelines(lines[1:])
            f.truncate()
            return proxy
        else:
            return None

prox = proxy_line('D:\\pycharmProjects_1\\projects\\proxy_list.txt')
options = uc.ChromeOptions()
driver = uc.Chrome(options=options)
wire_options = {
        'proxy': {
            'https': f'https://prox',
        }
    }
try:
    driver = uc.Chrome(version_main=114, seleniumwire_options=wire_options)
    driver.get("https://whoer.net")
except Exception as ex:
    print(ex)
finally:
    time.sleep(100)
    driver.close()
    driver.quit()
Duff89 commented 1 year ago
  1. В uc не нужно передавать путь к бинарнику, он делает сам options.binary_location = 'C:\Program Files\Google\Chrome\Application\chrome.exe' достаточно указать версию Chrome, которая установлена ​​в системе (в понимании 108): driver = uc.Chrome(version_main=108, seleniumwire_options=wire_options) 2)Прокси задается не так: wire_options = proxy_line('D:\pycharmProjects_1\projects\proxy_list.txt') а так: wire_options = { 'proxy': { 'https ':f' https://X7FiXtGT:V5xWAQSP@146.19.110.223:64304 ', } }

Да, это частично решило мою проблему, но всё равно код работает не так, как ожидается, а именно: открывает два браузера, первый на приветственной странице а второй на заданной, должен открываться один и переходить по заданной ссылке, то есть второй. ВТорая проблема, сайт не грузится, ошибка ERR_TUNNEL_CONNECTION_FAILED, но прокси рабочие

from seleniumwire import undetected_chromedriver as uc
import time

def proxy_line(file):
    with open(file, 'r+') as f:
        lines = f.readlines()
        if len(lines) > 0:
            proxy = lines[0].strip()
            f.seek(0)
            f.writelines(lines[1:])
            f.truncate()
            return proxy
        else:
            return None

prox = proxy_line('D:\\pycharmProjects_1\\projects\\proxy_list.txt')
options = uc.ChromeOptions()
driver = uc.Chrome(options=options)
wire_options = {
        'proxy': {
            'https': f'https://prox',
        }
    }
try:
    driver = uc.Chrome(version_main=114, seleniumwire_options=wire_options)
    driver.get("https://whoer.net")
except Exception as ex:
    print(ex)
finally:
    time.sleep(100)
    driver.close()
    driver.quit()

Всё работает как написано. Вы инициализируете браузер в двух местах: 1) driver = uc.Chrome(options=options) 2) driver = uc.Chrome(version_main=114, seleniumwire_options=wire_options) Вот 2 браузера и открываются

Насчет прокси:

wire_options = { 'proxy': { 'https': f'https://prox', } } У Вас реально прокси prox? Если Вы хотите, чтобы там подставилось значение переменной нужно делать так: wire_options = { 'proxy': { 'https': f'https://{prox}', } } Будьте, пожалуйста, более внимательны

Anton32reg commented 1 year ago

Всё работает как написано. Вы инициализируете в двух местах:

  1. driver = uc.Chrome(options=options)
  2. driver = uc.Chrome(version_main=114, seleniumwire_options=wire_options) Вот 2 браузера и открываются

Насчет прокси:

wire_options = { 'proxy': { 'https': f'https://prox', } } У Вас реально прокси прокси? Если Вы хотите, чтобы там было принято решение, необходимо сделать так: wire_options = { 'proxy': { 'https': f'https://{prox}', } } Будьте, пожалуйста, более внимательны

Да ты прав, благодарю. У меня к тебе вопрос, сталкивался ли ты с такой проблемой?

"Веб-страница по адресу https://2ip.ru/ , возможно, временно недоступна или постоянно перемещена по новому адресу.

ERR_TUNNEL_CONNECTION_FAILED" Прокси рабочие, не грузятся все сайты, даже гугл.

Duff89 commented 1 year ago

wire_options = { 'proxy': { 'https': f'https://prox', } }

Можно так попробовать wire_options = { 'proxy': { 'https': f'http://prox', } } букву S убрал если что

Anton32reg commented 1 year ago

Это не помогло. Я давно отошел от языка, вот вернулся, и так туплю, но, что-то щёлкнуло в голове и вот что помогло wire_options = { 'proxy': { 'https': f'http://136.243.92.30:26541', } }

видимо, не суждено реализация из файла :) пока не знаю в чем проблема, предполагаю что опять моя невнимательность

def proxy_line(file):
    with open(file, 'r+') as f:
        lines = f.readlines()
        if len(lines) > 0:
            proxy = lines[0].strip()
            f.seek(0)
            f.writelines(lines[1:])
            f.truncate()
            return proxy
        else:
            return None

prox = proxy_line('D:\\pycharmProjects_1\\projects\\proxy_list.txt')
options = uc.ChromeOptions()
wire_options = { 'proxy': { 'https': f'http://136.243.92.30:26541', } }
driver = uc.Chrome(version_main=114, seleniumwire_options=wire_options)
driver.get("https://2ip.ru/")
Duff89 commented 1 year ago

Это не помогло. Я давно отошел от языка, вот вернулся, и так туплю, но, что-то щёлкнуло в голове и вот что помогло wire_options = { 'proxy': { 'https': f'http://136.243.92.30:26541', } }

видимо, не суждено реализация из файла :) пока не знаю в чем проблема, предполагаю что опять моя невнимательность

def proxy_line(file):
    with open(file, 'r+') as f:
        lines = f.readlines()
        if len(lines) > 0:
            proxy = lines[0].strip()
            f.seek(0)
            f.writelines(lines[1:])
            f.truncate()
            return proxy
        else:
            return None

prox = proxy_line('D:\\pycharmProjects_1\\projects\\proxy_list.txt')
options = uc.ChromeOptions()
wire_options = { 'proxy': { 'https': f'http://136.243.92.30:26541', } }
driver = uc.Chrome(version_main=114, seleniumwire_options=wire_options)
driver.get("https://2ip.ru/")

Можно сделать примерно так:

proxy = "146.19.110.223:64304:X7FiXtGT:V5xWAQSP ip, port, login, password = proxy.split(":") А потом подставлять в нужных местах

Anton32reg commented 1 year ago

Так, прокси всё равно не работают как нужно, видимо, только соло...

Вот... появилось.... не сталкивался с таким? Снимок

её НЕТ когда использую чистый юндетект, но появляется при подмене юзер-агента и прокси.

Duff89 commented 1 year ago

Так, прокси всё равно не работают как нужно, видимо, только соло...

Вот... появилось.... не сталкивался с таким? Снимок

её НЕТ когда использую чистый юндетект, но появляется при подмене юзер-агента и прокси.

Вы же сами и ответили на вопрос. У Вас какой-то старый юзерагент

Anton32reg commented 1 year ago

Да, действительно. Спасибо, я бы долго мучался :)

Anton32reg commented 1 year ago

а есть помимо прокси, юа, андетект браузера ещё что-то? Сайты по анонимности(по типу 2ip) показывают что всё в порядке, но на деле сайты распознают что что-то не так

может в коде проблема?

from seleniumwire import undetected_chromedriver as uc
import time
from fake_useragent import UserAgent

try:
    def proxy_line(file):
        with open(file, 'r+') as f:
            lines = f.readlines()
            if len(lines) > 0:
                proxy = lines[0].strip()
                f.seek(0)
                f.writelines(lines[1:])
                f.truncate()
                return proxy
            else:
                return None

    options = uc.ChromeOptions()
    options.add_argument('--ignore-certificate-errors')
    ua = UserAgent()
    options.add_argument(f'--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36.')

    prox = proxy_line('D:\\pycharmProjects_1\\projects\\proxy_list.txt')

    wire_options = {
        'proxy': {
            'https': f'http://77.247.108.17:33080',
        }
    }

    driver = uc.Chrome(version_main=108, seleniumwire_options=wire_options, options=options)
    driver.get("ссылка")

except Exception as ex:
    print(ex)

finally:
    time.sleep(1000)
Duff89 commented 1 year ago

Проблема скорее всего в самом ip, я так понимаю это публичный прокси

Anton32reg commented 1 year ago

Проблема скорее всего в самом ip, я так понимаю это публичный прокси

Да, попробовал приватный прокси, картина повторилась :(

Anton32reg commented 1 year ago

Проблема скорее всего в самом ip, я так понимаю это публичный прокси

Привет, к тебе вопрос по другой теме, как сохранить измененния сделанный через F12? Я пробовал как здесь https://zawindows.ru/как-сделать-так-чтобы-изменения-в-инст/ но страница загружается без изменений

Anton32reg commented 1 year ago

Может ты знаешь

Duff89 commented 1 year ago

Может ты знаешь

Есть решения для selenium через selenium-wire, чтобы сделать такое. Вот здесь уже отвечал на такое: https://qna.habr.com/q/1271254 Если нужно конкретно руками такое сделать, хз