выберите первый элемент из строки поиска с помощью selenium python

#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)», ура!