#python #selenium #web-scraping #beautifulsoup
#python #селен #очистка веб-страниц #beautifulsoup
Вопрос:
я пытаюсь выбрать первый элемент из списка предложений после отправки ключа в строке поиска. Вот код, который я использую в данный момент:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://slotcatalog.com')
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID,"cookie-ok"))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID,"subs-close"))).click()
elem = driver.find_element_by_id("selsearch")
elem.send_keys("Starburst")
elem.send_keys(Keys.ARROW_DOWN).click()
но ошибка гласит: «Объект ‘NoneType’ не имеет атрибута ‘click'» — вы знаете, как я могу это исправить? заранее спасибо
Комментарии:
1. Добро пожаловать в stack overflow. Было бы полезно, если бы вы добавили весь стек вызовов, сгенерированный ошибкой, чтобы мы могли видеть, какая строка ее породила
Ответ №1:
вам вообще не нужно selenium
:
это можно легко сделать с помощью:
import requests
params = {
"blck": "topSrch",
"lang": "en",
"search_input": "Starburst"
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0"
}
goals = ["name", "url"]
def main(url):
with requests.Session() as req:
req.headers.update(headers)
r = req.get(url, params=params).json()
goal = [[item[g] for g in goals] for item in r]
print(goal[0])
main("https://slotcatalog.com/json.php")
Вывод:
['Starburst', '/en/slots/Starburst']
Теперь вы можете легко отправить запрос по URL-адресу.
Или, если вы хотите использовать selenium
so:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def main(url):
driver = webdriver.Firefox()
driver.get("https://slotcatalog.com")
goal = driver.find_element_by_css_selector(
"#selsearch").send_keys("Starburst")
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located(
(By.CSS_SELECTOR, "a.tt-suggestion:nth-child(1)"))
)
element.click()
main("https://slotcatalog.com")
Комментарии:
1. большое спасибо за помощь! Я не знал, что мне нужно было использовать «n-й дочерний элемент (1)», ура!