Как получить результат вывода с веб-сайта с помощью селена

Итак, есть этот код, который я хочу попробовать. если веб-сайт существует, он выводит доступные доменные имена. я использовал этот сайт www.eurodns.com/whois-search/app-domain-name

Если веб-сайт не существует, в настоящее время припаркован или зарегистрирован, это говорит об этом.

Код, о котором я думаю, включает в себя драйвер селена и хрома, вводящий текст и выполняющий поиск.

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

cli = ['https://youtube.com', 'https://google.com', 'https://minecraft.net', 'https://something.odoo.com']
Exists = []

for i in cli:
    driver.get("https://www.eurodns.com/whois-search/app-domain-name")
    Name = driver.find_element(By.CSS_SELECTOR, "input[name='whoisDomainName']")
    Name.send_keys(cli)
    driver.find_element(By.XPATH,/html/body/div/div[3]/div/div[2]/form/div/div/div/button).click()

Есть ли способ, например, if website available, exist.append(cli), elif web not valid, print('Not valid'), чтобы он мог отфильтровать существующий веб-сайт и веб-сайт, которого нет. Я думал об использовании BeautifulSoup для получения результатов, но я не уверен, как правильно его использовать.

Спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет необходимости использовать другие библиотеки.

Вместо того, чтобы использовать XPATH, потому что это может изменить структуру страницы. Всегда старайтесь искать элементы по идентификатору, если он связан с этим конкретным элементом (который по своей природе должен быть уникальным на странице), или по имени класса (если он кажется уникальным), или по атрибуту имени.


Некоторые замечания по алгоритму:

  1. Мы можем посетить домашнюю страницу один раз, а затем время от времени отправлять URL-адрес. Таким образом мы экономим время выполнения.

  2. Всякий раз, когда мы отправляем URL-адрес, нам просто нужно убедиться, что этот URL-адрес не существует (или что он существует)

  3. Назовите переменные более разговорным/описательным способом.

  4. Обратите внимание на быструю отправку слишком большого количества запросов на сайт. Это может заблокировать вас. Возможно, это не правильный подход для вашей задачи? Нет ли API, которые можно использовать для таких сервисов?

Ваш код становится:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import time

opts = Options()

# make web scraping 'invisible' if GUI is not required
opts.add_argument("--headless")
opts.add_argument('--no-sandbox')

user_agent = "user-agent=[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36]"
opts.add_argument(user_agent)
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=opts)

urls = ['https://youtube.com', 'https://google.com', 'https://minecraft.net', 'https://something.odoo.com']
exists = []

driver.get("https://www.eurodns.com/whois-search/app-domain-name")

for url in urls:

    # send url to textarea
    textarea = driver.find_element(By.NAME, "whoisDomainName")
    textarea.clear()  # make sure to clear textarea
    textarea.send_keys(url)

    # click 'WHOIS LOOKUP' button
    driver.find_element(By.ID, "submitBasic").click()

    # try to find error message (wait 3 sec)
    try:
        WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.CLASS_NAME, 'whoisSearchError')))
        print(f'URL {url} is not valid')
    except TimeoutException:
        print(f'URL {url} is valid')
        exists.append(url)

    time.sleep(30)  # wait 30 seconds to avoid '429 too many requests'


print(f"\nURLs that exist:\n", exists)

Вывод будет:

URL https://youtube.com is valid
URL https://google.com is valid
URL https://minecraft.net is valid
URL https://something.odoo.com is not valid

URLs that exist:
 ['https://youtube.com', 'https://google.com', 'https://minecraft.net']

Другие вопросы по теме