Добавление прокси в селен и необнаруженный хромдрайверPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Добавление прокси в селен и необнаруженный хромдрайвер

Сообщение Anonymous »

Я использую Selenium и Python для парсинга нескольких страниц. Я хочу использовать параллелизм, но мои прокси выдают «ошибка: нет адреса прокси». Это потому, что я использую Selenium и незамеченный веб-драйвер? Что мне следует изменить?

Код: Выделить всё

from concurrent.futures import ThreadPoolExecutor, TimeoutError
import time
import random
import undetected_chromedriver as UC

# Define WebDriver path and proxy settings (masked for privacy)
webdriver_path = "\\path\\to\\chromedriver.exe"
proxies = [
"http://username:password@proxy1.example.com:port",
"http://username:password@proxy2.example.com:port"
]

def setup_driver(proxy=None):
options = UC.ChromeOptions()
options.headless = False
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument(f"user-agent={random.choice(user_agents)}")
if proxy:
options.add_argument(f'--proxy-server={proxy}')
driver = UC.Chrome(service=UC.Service(webdriver_path), options=options)
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
return driver

def main(unique_urls, output_file):
existing_urls = load_existing_urls(output_file)
print(f"Loaded {len(existing_urls)} existing URLs")

drivers = [setup_driver(proxies[0]), setup_driver(proxies[1]), setup_driver()]

results = []
flag = 1

try:
# Initial setup with local connection
if flag == 1:
data = scrape_urls(drivers[2], unique_urls[0], flag=1)
if data:
results.append(data)
flag = 0  # Reset flag after initial setup

with ThreadPoolExecutor(max_workers=3) as executor:
futures = []
for i, base_url in enumerate(unique_urls):
if url_exists_in_existing(existing_urls, base_url):
continue

driver = drivers[i % 3]  # Rotate drivers for each URL
future = executor.submit(scrape_urls, driver, base_url, flag=0)
futures.append(future)

for future in futures:
try:
data = future.result(timeout=5)
if data:
results.append(data)
except TimeoutError:
print(f"Timeout for URL: {base_url}, retrying...")
driver.refresh()
except Exception as e:
print(f"Unexpected error: {e}")

# Write results in batches of 10
if len(results) >= 10:
append_row_to_csv(output_file, results)
results.clear()

if results:
append_row_to_csv(output_file, results)
print("Final batch written to CSV.")

finally:
for driver in drivers:
driver.quit()

output_file = "products.csv"
main(unique_urls, output_file)
Я потратил на это несколько часов, любая помощь будет полезна. Для краткости исключены ненужные функции.

Подробнее здесь: https://stackoverflow.com/questions/791 ... romedriver
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»