【问题标题】:How can I extract information from a HTML code using Python + Selenium? [closed]如何使用 Python + Selenium 从 HTML 代码中提取信息? [关闭]
【发布时间】:2019-09-18 11:19:24
【问题描述】:

我必须获取出现在这段代码中的选项,然后将它们全部放入一个数组中,以便稍后在 GUI 中显示这些选项,但我不知道该怎么做。

<select name="flt_technology" id="flt_technology" size="8" tabindex="1" multiple="" onchange="onChangeMessage('block','TechnicalReports');">
    <option value="3303">Aeroelastic Stability</option>
    <option value="3305">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aeroelastic Model</option>             
    <option value="3304">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aeroelastic Stability Criteria</option>
    <option value="3308">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aeroservoelastic Analysis</option>
    <option value="3306">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control Surfaces Reversal/Effectiveness</option>
    <option value="3311">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flutter Flight Test</option>
    <option value="3307">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flutter</option>
    <option value="3309">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flutter: Failure Conditions</option>
    <option value="3310">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ground Vibration Test</option>
    <option value="3710">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Qualification Equipment Test</option>
    <option value="3588">Weight and Balance</option>
    <option value="3589">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Center of Gravity Limits</option>
    <option value="3590">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Leveling Means</option>
    <option value="3591">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Loads Distribution - Weight X Cg Envelope Definition</option>
    <option value="3592">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Weight Limits</option>
</select>

【问题讨论】:

  • 你有没有尝试任何教程?
  • 我是使用 selenium 的新手,我尝试了一些方法,但都失败了。你有迹象吗?
  • 看看beautifulsoup 4,它是抓取html的扩展
  • 有问题的显示您尝试使用的代码和您收到的错误消息。

标签: python selenium selenium-webdriver


【解决方案1】:

列出打印 选项中的文本,您必须为visibility_of_all_elements_located()诱导WebDriverWait您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select#flt_technology[name='flt_technology']"))))
    print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "select#flt_technology[name='flt_technology'] option")))])
    #or
    print([my_elem.text for my_elem in select.options])
    
  • 使用XPATH

    select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='flt_technology' and @name='flt_technology']"))))
    print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//select[@id='flt_technology' and @name='flt_technology']//option")))])
    #or
    print([my_elem.text for my_elem in select.options])
    
  • 注意:您必须添加以下导入:

    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.select import Select
    

【讨论】:

    【解决方案2】:

    带有&lt;select&gt;标签使用Select

    element = self.find_element_by_id('flt_technology')
    select = Select(element)
    options = select.options
    

    这将返回&lt;option&gt; WebElements 的列表

    【讨论】:

      【解决方案3】:

      类似这样的:

      from selenium import webdriver
      
      driver = webdriver.Chrome()
      driver.get('http://www.the_website_you_want_to_scrape.com')
      select_elem = driver.find_element_by_id('flt_technology')
      options = [x for x in select_elem.find_elements_by_tag_name("option")]
      

      如果您需要选项的值:

      for element in options:
          print(element.get_attribute("value")) 
      

      【讨论】:

        猜你喜欢
        • 2016-08-28
        • 1970-01-01
        • 1970-01-01
        • 2021-11-03
        • 1970-01-01
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多