Как выбрать опцию из автоматических предложений, используя Selenium и Python

#python #selenium #selenium-webdriver #autosuggest #selenium4

#python #селен #selenium-webdriver #автоматическое предложение #selenium4

Вопрос:

Я пытаюсь выбрать опцию из автоматических предложений после отправки текста в поле поиска веб-сайта документации Selenium. Но я не могу найти ни одного из этих предложений.

Испытания кода:

 driver.get('https://www.selenium.dev/documentation/en/')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#search-by"))).send_keys("selenium")
 

Снимок автоматических предложений:

документация

Может ли кто-нибудь помочь мне, пожалуйста, выбрать какое-либо из автоматических предложений?

Комментарии:

1. Вы можете отправить полный текстовый вариант, а затем отправить ввод, или вы можете запустить javascript с помощью selenium. В этих случаях я предпочитаю вводить javascript

2. Я получил источник автоматических предложений в Chrome, введя что-то в поле поиска и нажав Ctrl-Shift-I , чтобы открыть Inspect в инструментах разработчика. Затем вы можете развернуть этот div, чтобы найти divs для каждого самовнушения.

3. Сможете ли вы сопоставить его с python, если я дам его вам на Java?

4. @Wilfred Clement Конечно, я приму это даже. Не стесняйтесь отвечать.

Ответ №1:

Это то autocomplete-suggestions div , что содержит все autocomplete-suggestion «ы».

Вот краткое описание элементов введите описание изображения здесь

Чтобы захватить элементы, я использовал f8 кнопку при поиске selenium, таким образом, элементы не исчезают.

Вот фрагмент кода для визуализации:

 def highlight_element(element):
    driver_elem = element.parent

    def apply_style(s):
        driver_elem.execute_script("arguments[0].setAttribute('style', arguments[1]);",
                                   element, s)

    original_style = element.get_attribute('style')
    apply_style("background: yellow; border: 2px solid red;")
    sleep(0.5)
    apply_style(original_style)

driver.get("https://www.selenium.dev/documentation/en/")
WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#search-by")))
driver.find_element_by_css_selector("#search-by").send_keys("selenium")
WebDriverWait(driver,30).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".autocomplete-suggestions  .autocomplete-suggestion")))
for ele in driver.find_elements_by_css_selector(".autocomplete-suggestions  .autocomplete-suggestion"):
    highlight_element(ele)
 

Ответ №2:

1 за ответ @Моше Славина. Это autocomplete-suggestions div, который содержит все autocomplete-suggestion's

Чтобы захватить элементы, я использовал getPageSource() для печати элементов на странице.

И как только я разобрался с элементом, остальная часть приведенного ниже кода говорит сама за себя

 wait.until(ExpectedConditions.elementToBeClickable(By.className("autocomplete-suggestion")));

List<WebElement> abc = driver.findElements(By.className("autocomplete-suggestion"));

String value = "Remote WebDriver client";

List<String> def = new ArrayList<String>();

    for (int i = 0; i < abc.size(); i  ) {

            //Get the values and store it in a list
            def.add(abc.get(i).getAttribute("data-title"));

        }

        if (def.contains(value))

            abc.get(def.indexOf(value)).click();

        else
            System.out.println("Value not present");