【问题标题】:Selecting a certain value from dropdown using python with selenium使用带有硒的python从下拉列表中选择某个值
【发布时间】:2017-06-24 14:02:25
【问题描述】:

我编写了一个脚本,使用带有 selenium 的 python 从网页中选择特定字段。该页面上有一个下拉菜单,我想从中选择“全部”。但是,我用我的脚本尝试了许多不同的方法来制作它,但做不到。 这是下拉菜单的样子。

用于下拉选择的 HTML 元素:

<select name="ctl00$body$MedicineSummaryControl$cmbPageSelection" onchange="javascript:setTimeout('__doPostBack(\'ctl00$body$MedicineSummaryControl$cmbPageSelection\',\'\')', 0)" id="ctl00_body_MedicineSummaryControl_cmbPageSelection">
        <option selected="selected" value="25">25</option>
        <option value="50">50</option>
        <option value="100">100</option>
        <option value="all">All</option>

    </select>

我尝试过的脚本:

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('http://apps.tga.gov.au/Prod/devices/daen-entry.aspx')

driver.find_element_by_id('disclaimer-accept').click()
time.sleep(5)
driver.find_element_by_id('medicine-name').send_keys('pump')
time.sleep(8)
driver.find_element_by_id('medicines-header-text').click()
driver.find_element_by_id('submit-button').click()
time.sleep(7)

 #selection for the dropdown should start from here

driver.find_element_by_xpath('//select[@id="ctl00_body_MedicineSummaryControl_cmbPageSelection"]').click()
driver.find_element_by_xpath('//select//option[@value]').send_keys("All")

【问题讨论】:

    标签: python-3.x selenium xpath selenium-webdriver web-scraping


    【解决方案1】:

    这对你有用:

    #option1
    select_obj = Select(driver.find_element_by_xpath('//select[@id="ctl00_body_MedicineSummaryControl_cmbPageSelection"]'))
    select_obj.select_by_visible_text('All')
    #option2
    select_obj = Select(driver.find_element_by_id('ctl00_body_MedicineSummaryControl_cmbPageSelection'))
    select_obj.select_by_visible_text('All')
    

    别忘了导入Selectfrom selenium.webdriver.support.ui import Select

    您可以阅读完整文档以在此处找到所有 Select 方法:https://seleniumhq.github.io/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.select.html

    【讨论】:

    • 感谢 Alex Lucaci,您的回答。不幸的是,它引发了以下错误: raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:
    • 是的,很抱歉,我已经更新了我的代码,现在应该可以使用了。
    • 点击此链接查看完整错误:“dropbox.com/s/qkeqjtcj0w2g06s/Error%20I%27m%20having.txt?dl=0
    • 哦,是的,我没有注意到您正在使用 find_element_by_id 并作为参数传递 xpath,因此您有两个选择:select_obj = Select(driver.find_element_by_id('ctl00_body_MedicineSummaryControl_cmbPageSelection'))select_obj = Select(driver.find_element_by_xpath('//select[@id="ctl00_body_MedicineSummaryControl_cmbPageSelection"]'))。让我知道它是否有效。
    【解决方案2】:

    我最初的想法是建议您尝试从下拉选择之前的元素中进行制表符,类似于此代码中的概念:

    driver.find_element_by_id('<id of element before the dropdown select>').send_keys(Keys.TAB)
    driver.find_element_by_id('//select[@id="ctl00_body_MedicineSummaryControl_cmbPageSelection"]').send_keys('AL')
    driver.find_element_by_id('//select[@id="ctl00_body_MedicineSummaryControl_cmbPageSelection"]').send_keys(Keys.ENTER + Keys.TAB)
    

    但是,堆栈跟踪中的错误可能会显示未找到具有该 ID 的下拉选择。我相信,当您使用 Selenium IDE 中的 Record 选项记录单击下拉选择并选择一个选项的操作时,您应该验证您使用的 id 是否是该元素的正确 id。

    【讨论】:

      【解决方案3】:

      终于找到了解决方法。这是我所做的:

      from selenium import webdriver
      import time
      
      driver = webdriver.Chrome()
      driver.get('http://apps.tga.gov.au/Prod/devices/daen-entry.aspx')
      
      driver.find_element_by_id('disclaimer-accept').click()
      time.sleep(5)
      driver.find_element_by_id('medicine-name').send_keys('pump')
      time.sleep(8)
      driver.find_element_by_id('medicines-header-text').click()
      driver.find_element_by_id('submit-button').click()
      time.sleep(7)
      
      driver.find_element_by_xpath('//select[@id="ctl00_body_MedicineSummaryControl_cmbPageSelection"]').click()
      driver.find_element_by_xpath('.//option[@value="all"]').click()
      time.sleep(10)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        • 2020-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多