首页 > 解决方案 > 无法使用 selenium 将所需的键发送到下拉列表

问题描述

我正在尝试抓取一个需要选择下拉列表给出的距离的网站,但是在发送密钥时,它没有采用程序发送的值,而是在下拉列表中采用了一些随机值。请帮忙

我尝试使用 XPath 并使用 send_keys 发送值,但都是徒劳的。什么都没有帮助我。

url = 'https://www.solargard.com/find-a-dealer/'
x = '98357'
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(url)
loc = driver.find_element_by_xpath('//*[@id="zip"]')
loc.send_keys(x)
driver.find_element_by_xpath("//button[@data-id = 
'distance_metric']").send_keys('150 mi')
driver.find_element_by_xpath("//label[@for = 'select_all']").click()
time.sleep(5)
sub = driver.find_element_by_xpath("//button[@type = 'submit' and @class 
= 'btn btn-primary upper']")
sub.click()

我想选择距离为 150 英里的最大值。如果有人可以帮助我,那就太好了,因为我在这个领域还很陌生。

标签: pythonselenium

解决方案


这是您可以使用的 xpath。

(//li[@class='divider']/preceding-sibling::li)[last()]

以下是您可以使用的代码。

url = 'https://www.solargard.com/find-a-dealer/'
driver.get(url)

loc = driver.find_element_by_xpath('//*[@id="zip"]')
loc.send_keys('98357')
driver.find_element_by_css_selector("[data-id='distance_metric']").click()
maxMilesEle = WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH,"(//li[@class='divider']/preceding-sibling::li)[last()]")))
maxMilesEle.location_once_scrolled_into_view
maxMilesEle.click()
driver.find_element_by_xpath("//label[@for = 'select_all']").click()
# time.sleep(5)
sub = driver.find_element_by_xpath("//button[@type = 'submit' and @class= 'btn btn-primary upper']")
sub.click()

确保导入以下内容。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

推荐阅读