使用Selenium选择下拉菜单选项-下拉菜单只有在输入搜索查询后才会出现



我希望有人能帮助我选择一个弹出式下拉菜单选项使用硒在python在谷歌Colab。

URL为:http://www.neotroptree.info/data/countrysearch

该网站允许按地理位置搜索。一旦你在域名框中输入一个搜索词(这里我使用的是搜索词"Cerrado"),一个下拉菜单就会出现域名匹配。如果您点击塞拉多下拉选项,网页将显示该搜索的所有数据结果。

这样做的最终目标是从这些数据结果(例如,纬度,经度等)中抓取文本信息。由于没有与域名搜索相关的唯一URL,我能想到的唯一方法是使用python &Selenium用于导航到结果页面。

到目前为止,我已经能够设置web驱动程序,获得原始URL并将我的搜索词('Cerrado')发送到域输入框。

# Install required modules/packages
!pip install selenium -qq
!pip install beautifulsoup4 -qq
!apt install chromium-chromedriver -qq
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
# Set webdriver as Chrome
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver', options=chrome_options)
# Direct to webpage and search for the Cerrado 
driver.get('http://www.neotroptree.info/data/countrysearch')
driver.maximize_window()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#domain")))
driver.find_element_by_name('domain_s').send_keys('Cerrado')

在此之后,我不确定如何与输入搜索词后应该弹出的下拉菜单交互。我试过使用选择和下拉菜单id,出现错误信息。

dropdown = Select(driver.find_element_by_id('ui-id-20'))
NoSuchElementException                    Traceback (most recent call last)
<ipython-input-27-1329b8077ff2> in <module>()
----> 1 dropdown = Select(driver.find_element_by_id('ui-id-20'))
3 frames
/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response)
240                 alert_text = value['alert'].get('text')
241             raise exception_class(message, screen, stacktrace, alert_text)
--> 242         raise exception_class(message, screen, stacktrace)
243 
244     def _value_or_default(self, obj, key, default):
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="ui-id-20"]"}
(Session info: headless chrome=87.0.4280.66)

这是当我在Chrome中手动单击下拉菜单来检查它时显示的内容:

li class="ui-menu-item" id="ui-id-20" tabindex="-1">Cerrado</li

关于如何从弹出式下拉菜单中选择一些东西的任何建议将非常感激!

这不是一个常规的下拉菜单,并且您的字段是由键入行为触发的,您需要从代码中模拟键入,这里是一个解决方案。

domain_string = 'Cerrado'
domain_element = driver.find_element_by_name('domain_s')
for char in domain_string:
domain_element.send_keys(char)
time.sleep(0.3)
driver.find_element_by_class_name('ui-menu-item').click()

最新更新