Итак, есть этот код, который я хочу попробовать. если веб-сайт существует, он выводит доступные доменные имена. я использовал этот сайт 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 для получения результатов, но я не уверен, как правильно его использовать.
Спасибо!
Нет необходимости использовать другие библиотеки.
Вместо того, чтобы использовать XPATH, потому что это может изменить структуру страницы. Всегда старайтесь искать элементы по идентификатору, если он связан с этим конкретным элементом (который по своей природе должен быть уникальным на странице), или по имени класса (если он кажется уникальным), или по атрибуту имени.
Некоторые замечания по алгоритму:
Мы можем посетить домашнюю страницу один раз, а затем время от времени отправлять URL-адрес. Таким образом мы экономим время выполнения.
Всякий раз, когда мы отправляем URL-адрес, нам просто нужно убедиться, что этот URL-адрес не существует (или что он существует)
Назовите переменные более разговорным/описательным способом.
Обратите внимание на быструю отправку слишком большого количества запросов на сайт. Это может заблокировать вас. Возможно, это не правильный подход для вашей задачи? Нет ли 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']