Selenium не удается найти элемент поиска в наборе полей

#python #selenium #web-scraping #data-mining #data-extraction

Вопрос:

Я хотел соскрести данные с веб-сайта, который «https://fhsaa.com/sports/2020/1/28/member_directory.aspx». Идея состоит в том, чтобы искать названия школ по идентификатору или названию школы, а затем удалять информацию. но когда я использовал xpath или css_selecotr, возникает исключение «o такой элемент: Не удается найти элемент: {«метод»:»xpath»,»селектор»:»//ввод[@name=’school_name’]»}

«Я использовал как xpath, css_selector, так и waits, но безуспешно. Вот код…

 <fieldset class="border">
            <legend class="border">School Filter</legend>
            <form method="GET" action="https://fhsaahome.org/widget/school-directory/submit" accept-charset="UTF-8">
                <div class="row">
                    
                    <div class="col-md-4">
                        
                        <select class="form-control" name="school_id"><option selected="selected" value="">--Select--</option><option value="714">Abundant Life Christian (Margate)</option><option value="665">Academy at the Lakes (Land O'Lakes)</option><option value="639">Academy Prep (St. Petersburg)</option><option value="4">Admiral Farragut (St. Petersburg)</option><option value="1191">AIE Charter (Miami Springs)</option>value="542">Zephyrhills</option><option value="1062">Zephyrhills Christian</option></select>
                    </div>
                    <div class="col-md-4">
                        
                        <input class="form-control" placeholder="Enter School Name" name="school_name" type="text" value="">
                    </div>
                    <br><br>
                    <div class="col-md-2">
                        <input class="btn btn-secondary btn-md" type="submit" value="Search">
                      
                    </div>
                
                </div> 
 

Ответ №1:

Это игра в iframe, я вижу, что веб-сайт вызвал API для непрерывного перемешивания xpath, который вы ищете. Я добавляю фрагмент кода для переключения между iframes, и они работают:

 iframe = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to.frame(iframe)
element = driver.find_element_by_xpath('//html/body/div[1]/fieldset/form/div/div[2]/input') 

Это полная программа:

 import os
from selenium import webdriver

from time import sleep
from random import randint

chromedriver = "C:Program FilesPython39Scriptschromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
url = 'https://fhsaa.com/sports/2020/1/28/member_directory.aspx'
driver.get(url)
sleep(randint(2,3))

iframe = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to.frame(iframe)
element = driver.find_element_by_xpath('//html/body/div[1]/fieldset/form/div/div[2]/input')

element.send_keys('yourschool')
sleep(randint(2,3)) 

Ответ №2:

Я протестировал ваш xpath в программном обеспечении BaseX, и ваш xpath верен.

Однако ваш HTML 5 неверен

У тебя есть это

 ter (Miami Springs)</option>value="542">Zephyrhills</option>
 

и тебе следовало бы

 ter (Miami Springs)</option><option value="542">Zephyrhills</option>
 

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

1. Спасибо за ваш ответ. но вы можете воспользоваться ссылкой, которую я дал… чтобы проверить xpath, как selenium выдает исключение «Такого элемента нет» даже после использования правильного xpath

2. Теперь я понимаю!

3. Я сожалею о своем уровне английского языка. Вот хороший xpath //выберите[@name=’school_id’]/вариант/текст()

4. @NoobDev Вы устранили проблему ?