Selenium 不可靠地返回查找到的元素

问题描述 投票:0回答:1

我被卡住了..这么多时间..在这里查找了数百个问题和答案..

我想从银行产品网站 grep 数据,例如“德尔塔”来自:

https://wertpapiere.ing.de/Investieren/Derivat/DE000HS2JL06
(

链接将于 2024 年 9 月 17 日失效,因为产品将于那时结束)

delta.text 应该是 -0,0193

第一次尝试:

delta = driver.find_element(By.XPATH, '//*[text()=\'Delta\']/following-sibling::td')
w

有时可以工作..大多数情况下不可以..出于什么原因?可能是这样的情况,因为“Delta”在网站上出现了 10 次,但是:

delta = driver.find_element(By.XPATH, '//*[text()=\'Delta\']/[5]following-sibling::td') 
s

应该可以解决问题,但没有。

再次尝试:

delta = driver.find_element(By.XPATH, '//td[contains(text(), "Delta")]/following-sibling::td') 

应该有效,但也无效。

尝试使用完整补丁应该可以解决问题:

delta = driver.find_element(By.XPATH, '/html/body/main/div[2]/div/div[2]/div[1]/sh-derivative-greeks/div/div[1]/div/table/tbody/tr[2]/td[2]')

但是找不到该元素;我认为是因为网站正在生成动态 ID。

有人有决定性的秘诀吗?

非常感谢! 克里斯

selenium-webdriver web-scraping xpath dynamic find
1个回答
0
投票

该页面中的信息通过 XHR 调用提供给各种 API 端点。您可以在浏览器的开发工具 -> 网络选项卡中检查这些端点。 以下是获得特定

delta
值的方法:

import requests
import pandas as pd

pd.set_option('display.max_columns', None)
pd.set_option('display.max_colwidth', None)

headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.79 Safari/537.36'
}

df = pd.json_normalize(requests.get('https://component-api.wertpapiere.ing.de/api/v1/derivative/greeks/DE000HS2JL06', headers=headers).json())
print(df[[x for x in df.columns if x not in ['description.value']]])

终端结果:

isin    isEmpty isVisible   description.label   delta.value delta.formatString  delta.formatType    delta.label gamma.value gamma.formatString  gamma.formatType    gamma.label theta.value theta.formatString  theta.formatType    theta.label vega.value  vega.formatString   vega.formatType vega.label  rho.value   rho.formatString    rho.formatType  rho.label   omega.value omega.formatString  omega.formatType    omega.label labels.title    labels.noInformationAvailable
0   DE000HS2JL06    False   True    Erklärung der Griechen  -0.0193 0,0.00[00]  Number  Delta   0.0003  0,0.00[00]  Number  Gamma   -0.003  0,0.00[00]  Number  Theta   0.0139  0,0.00[00]  Number  Vega    -0.0382 0,0.00[00]  Number  Rho -8.8416 0,0.00  Number  Omega (Hebel)   Griechen    Keine Informationen vorhanden

可以在此处找到请求文档。

© www.soinside.com 2019 - 2024. All rights reserved.