python - 检查子元素的文本后如何捕获父元素的文本
问题描述
store_block_list = '//div[@class="amlocator-store-information"]'
anc ='//div[@class="amlocator-store-information"]/parent::div'
driver.get('https://www.charlottesweb.com/where-to-buy-charlottes-web/partner-locations')
wait = WebDriverWait(driver, 30)
storeElement = wait.until(EC.visibility_of_all_elements_located((By.XPATH, store_block_list)))
full_list = []
address_list = []
for store in storeElement:
address = driver.execute_script('return arguments[0].childNodes[2].textContent;', store).strip()
if address not in address_list:
address_list.append(address)
f=driver.find_element_by_xpath(anc)
full_list.append(f.get_attribute('data-amid'))
driver.quit()
print(full_list)
我正在浏览这个站点,我正在尝试捕获地址文本并附加到地址_list,如果地址不在列表中,然后移动到 data-amid 并捕获它,我不直接捕获 dat-amid 的原因是一些地址不是唯一的,我只想在唯一地址中捕获数据。
解决方案
要捕获数据,您可以运行:
parent = store.find_element_by_xpath('..')
grandparent = parent.find_element_by_xpath('..')
data_amid = grandparent.get_attribute('data-amid')
这将返回数字值
您的代码的一个问题是您正在使用 'f' 中搜索数据find_element_by_xpath
,这只会返回找到的第一个元素。如果不向上移动到祖父节点,则get_attribute
调用将仅返回“无”,如果您确实从 f 向上移动到祖父节点,find_element_by_xpath
则将始终在第一个元素处停止并返回“1”。
如果您使用('..')
from 'store' 两次向上移动祖父节点然后运行,您可以获得 data-amid 属性。
这是在您的代码中:
driver.get('https://www.charlottesweb.com/where-to-buy-charlottes-web/partner-locations')
wait = WebDriverWait(driver, 30)
storeElement = wait.until(EC.visibility_of_all_elements_located((By.XPATH, store_block_list)))
full_list = []
address_list = []
for store in storeElement:
address = driver.execute_script('return arguments[0].childNodes[2].textContent;', store).strip()
if address not in address_list:
address_list.append(address)
parent = store.find_element_by_xpath('..')
grandparent = parent.find_element_by_xpath('..')
print(grandparent.get_attribute('data-amid'))
full_list.append(grandparent.get_attribute('data-amid'))
driver.quit()
print(full_list)
推荐阅读
- reactjs - 在 Forms 中使用 ant design 开关
- mpi - MPI_Send 不会因目标 -1 而失败
- overriding - 如何使这个 do_deploy 机器覆盖工作?
- bash - 如何将列表作为 env 变量传递给 Terraform 使用?
- javafx - 我应该使用窗口弹出窗口还是应用内覆盖?
- google-tag-manager - 自定义 HTML 代码在 Google 跟踪代码管理器中如何工作?
- html - Firebase 部署后没有显示图像?
- javascript - 为什么 process.env 对象是空的,但我可以访问它的属性?
- csv - 可以将 Clickhouse 表指向特定的文件路径吗?
- excel - 有没有办法使用工作表保护来允许用户输入值但保护格式?