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