Как параллельно проверять URL-адреса закладок с помощью Playwright с подключением к внешнему браузеруPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как параллельно проверять URL-адреса закладок с помощью Playwright с подключением к внешнему браузеру

Сообщение Anonymous »

У меня есть задача: мне нужно проверить до 1000 URL-адресов закладок с помощью Playwright. Мне нужно проверить достоверность этих URL-адресов параллельно (в идеале 3-5 одновременных проверок). Я использую внешний экземпляр браузера Firefox и подключаюсь к нему с помощью Playwright.
Я хочу обеспечить следующее:
  • < li>Создавайте экземпляр браузера только один раз.
  • Проверяйте URL-адреса параллельно (3–8 одновременных проверок).
  • Эффективно обрабатывайте до 1000 URL-адресов. .
Может ли кто-нибудь дать рекомендации или фрагмент кода, как этого добиться?
JavaScript и Python подходят.
Дополнительная информация
  • Экземпляр внешнего браузера: без браузера
I попытался создать несколько контекстов браузера, каждый из которых выполнял задачу проверки URL-адреса с помощью Playwright. Я ожидал, что каждый контекст браузера будет независимо переходить к указанному URL-адресу и проверять его доступность (статус HTTP 200).
мой прототип

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

async def check_bookmark(context, url):
page = await context.new_page()
try:
await page.goto(url)
status = await page.evaluate('() => document.readyState')
if status == 'complete':
print(f"{url} is valid")
else:
print(f"{url} is invalid")
except Exception as e:
print(f"{url} is invalid: {str(e)}")
finally:
await page.close()

async def main():
bookmark_urls = ["https://example.com"]

async with async_playwright() as p:
browser = await p.firefox.connect('ws://localhost:3000/playwright/firefox')

contexts = []

for i in range(0, 3):
context = await browser.new_context()
contexts.append(context)

tasks = []
num_contexts = len(contexts)
num_urls = len(bookmark_urls)
urls_per_context = num_urls // num_contexts

for i in range(num_contexts):
start_index = i * urls_per_context
end_index = start_index + urls_per_context
urls_subset = bookmark_urls[start_index:end_index]

for url in urls_subset:
tasks.append(check_bookmark(contexts[i], url))

await asyncio.gather(*tasks)

await browser.close()

if __name__ == '__main__':
asyncio.run(main())
Но это всегда выдавало мне эту ошибку: целевая страница, контекст или браузер были закрыты


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

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

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

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

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

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

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