为什么这对这个有效,但对这个无效?[硒][Python]

2024-06-30 05:42:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个股票检查,当我在finance.yahoo.com去亚马逊(AMZN)时,我有点问题。我的代码工作得很好,但当我尝试特斯拉(TSLA)这样的例子时,它就不起作用了。这是我的部分代码

getperstock = driver.find_element_by_xpath('//*[@class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)"]').text #Works
print(str(getperstock))
#"Trsdu(0.3s) Fw(500) Pstart(10px) Fz(24px) C($negativeColor)"
getstockratio = driver.find_element_by_xpath('//*[@class="Trsdu(0.3s) Fw(500) Pstart(10px) Fz(24px) C($positiveColor)"]').text #Doesnt
print(str(getstockratio))

Tags: 代码textbydriverelementfindxpathclass
1条回答
网友
1楼 · 发布于 2024-06-30 05:42:32

这里是最小的HTML

<div class="D(ib) Mend(20px)" data-reactid="31">
    <span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)"
        data-reactid="32">670.97</span>
    <span class="Trsdu(0.3s) Fw(500) Pstart(10px) Fz(24px) C($negativeColor)"
        data-reactid="33">-20.65 (-2.99%)</span>
    <div id="quote-market-notice" class="C($tertiaryColor) D(b) Fz(12px) Fw(n) Mstart(0) mobpsm Mt(6px) mobpsm"
        data-reactid="34">
        <span data-reactid="35">At close: 4:00PM EDT</span>
    </div>
</div>

获取第一个span的第一个xpath是可以的。但是第二个span将包括negativepositive,因此如果股票走势为负/正,它将无法定位元素。我在你的评论中看到,你说它奏效了,但我确信,一旦它走向相反的方向,它就会失败

更好的方法:

# get parent of both `span`
parent = driver.find_element_by_xpath('//div[@class="D(ib) Mend(20px)"]')
# get the `span` insides
span_elems = parent.find_elements_by_tag_name("span")

# first one is the stock price
price = span_elems[0].text
# second span is the %
ratio = span_elems[1].text
# third one is the "at close..." but you dont need it

顺便说一下,不要使用find_elements...来查找父节点。使用显式等待将使代码高效地完成等待部分:https://selenium-python.readthedocs.io/waits.html

相关问题 更多 >