Python 元素在检查模式下具有ID,但在原始HTML中没有

Python 元素在检查模式下具有ID,但在原始HTML中没有,python,html,selenium,web-scraping,Python,Html,Selenium,Web Scraping,我目前正在使用Python和Selenium编写一个小型web抓取脚本 我试图从一个表中获取一些信息,该表在检查模式下具有特定ID。 但是,当我以原始HTML打开页面时(在无法使用xpath或css_选择器定位该表之后,我这样做了),该表没有提到的ID 这怎么可能 如需更好的解释: 这是我的浏览器中在检查模式下的外观 [...] 这就是当我以原始HTML文件的形式打开页面时的样子 [...] 身份证怎么可能就这么消失了? (JFI,这是我的第一个问题,所以我为格式错误道歉!) 提前谢谢

我目前正在使用Python和Selenium编写一个小型web抓取脚本

我试图从一个表中获取一些信息,该表在检查模式下具有特定ID。 但是,当我以原始HTML打开页面时(在无法使用xpath或css_选择器定位该表之后,我这样做了),该表没有提到的ID

这怎么可能

如需更好的解释:

这是我的浏览器中在检查模式下的外观


[...]
这就是当我以原始HTML文件的形式打开页面时的样子


[...]
身份证怎么可能就这么消失了? (JFI,这是我的第一个问题,所以我为格式错误道歉!)


提前谢谢

原因是,ID是在运行时添加的。

原因是,ID是在运行时添加的。

ID属性的值,即ext-gen1076包含一个数字,显然是动态生成的。id属性值的前缀,即ext gen表示id是在运行时使用ext JS生成的


Ext JS 是一个JavaScript框架,用于为任何现代设备构建数据密集型、跨平台的web和移动应用程序


这个用例 您可能已经识别了
元素,甚至在呈现完整的代码之前。因此,id属性丢失


识别extjs元素 随着id属性值的变化,即本质上是动态的,您将无法使用id属性的完整值,只能使用静态的部分值。根据您提供的HTML:

<table id='ext-gen1076' class='bats-table bats-table--center'>
[...]
</table>
  • 使用
    XPATH

    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[starts-with(@id,'ext-gen')]")))
    
    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[@class='bats-table bats-table--center' and starts-with(@id,'ext-gen')]")))
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 但是,还有许多其他元素的id属性以ext gen开头。因此,要唯一标识
    元素,您需要按如下方式组合class属性:

    • 使用
      CSS\u选择器

      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "table[id^='ext-gen']")))
      
      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "table.bats-table.bats-table--center[id^='ext-gen']")))
      
    • 使用
      XPATH

      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[starts-with(@id,'ext-gen')]")))
      
      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[@class='bats-table bats-table--center' and starts-with(@id,'ext-gen')]")))
      

    参考文献 有关详细讨论,请参见:

    id属性的值,即ext-gen1076包含一个数字,并且显然是动态生成的。id属性值的前缀,即ext gen表示id是在运行时使用ext JS生成的


    Ext JS 是一个JavaScript框架,用于为任何现代设备构建数据密集型、跨平台的web和移动应用程序


    这个用例 您可能已经识别了
    元素,甚至在呈现完整的代码之前。因此,id属性丢失


    识别extjs元素 随着id属性值的变化,即本质上是动态的,您将无法使用id属性的完整值,只能使用静态的部分值。根据您提供的HTML:

    <table id='ext-gen1076' class='bats-table bats-table--center'>
    [...]
    </table>
    
  • 使用
    XPATH

    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[starts-with(@id,'ext-gen')]")))
    
    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[@class='bats-table bats-table--center' and starts-with(@id,'ext-gen')]")))
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 但是,还有许多其他元素的id属性以ext gen开头。因此,要唯一标识
    元素,您需要按如下方式组合class属性:

    • 使用
      CSS\u选择器

      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "table[id^='ext-gen']")))
      
      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "table.bats-table.bats-table--center[id^='ext-gen']")))
      
    • 使用
      XPATH

      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[starts-with(@id,'ext-gen')]")))
      
      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[@class='bats-table bats-table--center' and starts-with(@id,'ext-gen')]")))
      

    参考文献 有关详细讨论,请参见:

    检查这篇文章的相似之处检查这篇文章的相似之处