python - 无法使用 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 英里的最大值。如果有人可以帮助我,那就太好了,因为我在这个领域还很陌生。
解决方案
这是您可以使用的 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
推荐阅读
- r - 需要在 rstudio 中使用 alpha 和 log 10 方法检查采样事件
- excel - 根据当前工作表中的值(比如 Sheet1)禁用另一张工作表(比如 Sheet2)上的单元格范围
- node.js - Sequelize:无法对列 UpdatedAt 进行更新
- javascript - 突变通过 react-adopt 触发两次
- javascript - 想要获取数组键的值
- python - Sphinx 快速入门有限选项
- r - 将矩阵的季度回报转换为年度回报
- javascript - POST https://www....?action=getclientRecords 在获取数据时显示错误 500
- c# - 如何通过将 curl 更改为 WWWform 来统一使用 curl
- ios - 带有选择闪烁选项的 Swift UITableview 单元格复选标记