【问题标题】:How to select an option from the dropdown menu using Selenium and Python如何使用 Selenium 和 Python 从下拉菜单中选择一个选项
【发布时间】:2020-09-17 12:33:11
【问题描述】:

我正在尝试使用 Python 中的 Selenium 获取 Metro-North 中所有车站组合的票价。我想去他们的票价页面,将车站名称放入选择字段,单击票价按钮,然后将所需的值复制到数据框中。

我尝试了所有可能的选项来从下拉菜单中选择电台,但没有任何效果,因为我收到错误消息:ElementNotInteractableException

我试过的代码:

driver = webdriver.Safari()
driver.get('http://as0.mta.info/mnr/schedules/sched_form.cfm')

select = Select(driver.find_element_by_id('Vorig_station'))
print([o.text for o in select.options])
time.sleep(3)
select.select_by_visible_text('ANSONIA')
element = driver.find_element_by_xpath('//*[@id="frmindex"]/table[2]/tbody/tr[6]/td/input[2]')
element.click()
driver.close()

打印命令显示选项,但我无法选择并转到下一个票价页面。

请帮忙!

【问题讨论】:

    标签: python selenium xpath css-selectors webdriverwait


    【解决方案1】:

    要使用 SeleniumFrom Staion 中选择 ANSONIA 选项来获取 Metro-North 中所有车站组合的票价需要为element_to_be_clickable()诱导WebDriverWait,可以使用下面的Locator Strategies

    • 使用CSS_SELECTOR

      driver.get("http://as0.mta.info/mnr/schedules/sched_form.cfm")
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select#Vorig_station"))).click()
      select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select#Vorig_station"))))
      print([o.text for o in select.options])
      select.select_by_visible_text('ANSONIA')
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[value='fares']"))).click()
      
    • 使用XPATH

      driver.get("http://as0.mta.info/mnr/schedules/sched_form.cfm")
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='Vorig_station']"))).click()
      select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='Vorig_station']"))))
      print([o.text for o in select.options])
      select.select_by_visible_text('ANSONIA')
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@value='fares']"))).click()
      
    • 控制台输出:

      ['ANSONIA', 'APPALACHIAN TRAIL', 'ARDSLEY-ON-HUDSON', 'BEACON', 'BEACON FALLS', 'BEDFORD HILLS', 'BETHEL', 'BOTANICAL GARDEN', 'BRANCHVILLE', 'BREAKNECK RIDGE', 'BREWSTER', 'BRIDGEPORT', 'BRONXVILLE', 'CANNONDALE', 'CHAPPAQUA', 'COLD SPRING', 'CORTLANDT', 'COS COB', 'CRESTWOOD', 'CROTON FALLS', 'CROTON-HARMON', 'DANBURY', 'DARIEN', 'DERBY', 'DOBBS FERRY', 'DOVER PLAINS', 'EAST NORWALK', 'FAIRFIELD', 'FAIRFIELD METRO', 'FLEETWOOD', 'FORDHAM', 'GARRISON', 'GLENBROOK', 'GLENWOOD', 'GOLDENS BRIDGE', 'GRAND CENTRAL', "GREEN'S FARMS", 'GREENWICH', 'GREYSTONE', 'HARLEM - 125TH ST.', 'HARLEM VALLEY-WINGDALE', 'HARRISON', 'HARTSDALE', 'HASTINGS-ON-HUDSON', 'HAWTHORNE', 'IRVINGTON', 'KATONAH', 'LARCHMONT', 'LUDLOW', 'MAMARONECK', 'MANITOU', 'MARBLE HILL', 'MEADOWLANDS SPORTS COMPLEX', 'MELROSE', 'MERRITT 7', 'MILFORD', 'MORRIS HEIGHTS', 'MOUNT KISCO', 'MOUNT PLEASANT', 'MT VERNON EAST ', 'MT VERNON WEST', 'NAUGATUCK', 'NEW CANAAN', 'NEW HAMBURG', 'NEW HAVEN', 'NEW ROCHELLE', 'NH-STATE ST.', 'NOROTON HEIGHTS', 'NORTH WHITE PLAINS', 'OLD GREENWICH', 'OSSINING', 'PATTERSON', 'PAWLING', 'PEEKSKILL', 'PELHAM', 'PHILIPSE MANOR', 'PLEASANTVILLE', 'PORT CHESTER', 'POUGHKEEPSIE', "PURDY'S", 'REDDING', 'RIVERDALE', 'RIVERSIDE', 'ROWAYTON', 'RYE', 'SCARBOROUGH', 'SCARSDALE', 'SEYMOUR', 'SOUTH NORWALK', 'SOUTHEAST', 'SOUTHPORT', 'SPRINGDALE', 'SPUYTEN DUYVIL', 'STAMFORD', 'STRATFORD', 'TALMADGE HILL', 'TARRYTOWN', 'TENMILE RIVER', 'TREMONT', 'TUCKAHOE', 'UNIVERSITY HEIGHTS', 'VALHALLA', 'WAKEFIELD', 'WASSAIC', 'WATERBURY', 'WEST HAVEN', 'WESTPORT', 'WHITE PLAINS', 'WILLIAMS BRIDGE', 'WILTON', 'WOODLAWN', 'YANKEES-E153 ST.', 'YONKERS']
      
    • 注意:您必须添加以下导入:

      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
      
    • 浏览器快照:

    【讨论】:

    • 它对我不起作用。我继续有 ElementNotInteractableException 错误
    • @ZheniaMagic 查看更新的答案并让我知道状态。
    • 太棒了!现在它将正确的车站放入选择中,但它没有按下票价按钮
    • @ZheniaMagic 理想情况下,代码块应该可以帮助您实现这一切。但是,您的主要问题/问题现在似乎已解决:)
    • 是的,它已经解决了,但现在我虽然尝试了不同的方法,但我无法按下按钮:`(
    猜你喜欢
    • 2021-12-08
    • 2020-05-14
    • 1970-01-01
    • 2018-02-17
    • 2016-07-28
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 2017-03-23
    相关资源
    最近更新 更多