无法通过selenium和python访问html元素

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

我想通过selenium访问html元素。

这是我的代码:

url = 'https://finance.yahoo.com/quote/ABBV/analysis'
xpath_string = '//html//body//div[1]//main//section//section//section//article//section[7]//div[1]//section[1]//div//div//div[3]//div[1]//span[1]'
print('############# Kursziel (via Yahoo)')
print("URL (yahoo):",url)
print("XPath (yahoo):",xpath_string)
try:

    driver.get(url)
    raw_res = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.XPATH, xpath_string)))
    print("Raw res (yahoo): ", raw_res)

    // do stuff and return value

except Exception as e:
    // handle exception

我通过打开 DOM 树并单击元素上的“复制完整 XPath”,从开发工具获取 xPath。

我搜索的元素是平均值(来自研究分析->分析师价格目标)。

这个原理适用于其他网站,但不适用于这个网站。

我收到此错误:

URL (yahoo): https://finance.yahoo.com/quote/ABBV/analysis
XPath (yahoo): 
//html//body//div[1]//main//section//section//section//article//section[7]//div[1]//section[1]//div//div//div[3]//div[1]//span[1]
Created TensorFlow Lite XNNPACK delegate for CPU.
Error getting price target (yahoo) for ABBV: Message: 
Stacktrace:
    GetHandleVerifier [0x00007FF6098D1502+60802]
    (No symbol) [0x00007FF60984AC02]
    (No symbol) [0x00007FF609707CE4]
    (No symbol) [0x00007FF609756D4D]
    (No symbol) [0x00007FF609756E1C]
    (No symbol) [0x00007FF60979CE37]
    (No symbol) [0x00007FF60977ABBF]
    (No symbol) [0x00007FF60979A224]
    (No symbol) [0x00007FF60977A923]
    (No symbol) [0x00007FF609748FEC]
    (No symbol) [0x00007FF609749C21]
    GetHandleVerifier [0x00007FF609BD411D+3217821]
    GetHandleVerifier [0x00007FF609C160B7+3488055]
    GetHandleVerifier [0x00007FF609C0F03F+3459263]
    GetHandleVerifier [0x00007FF60998B846+823494]
    (No symbol) [0x00007FF609855F9F]
    (No symbol) [0x00007FF609850EC4]
    (No symbol) [0x00007FF609851052]
    (No symbol) [0x00007FF6098418A4]
    BaseThreadInitThunk [0x00007FF98348257D+29]
    RtlUserThreadStart [0x00007FF9843AAA48+40]

如果我缩短 XPath,最后一个起作用的是: '//html//body//div[1]//main'

但即使在这一点上,也存在一些握手错误(听起来像是 TCP 问题):

URL (yahoo): https://finance.yahoo.com/quote/ABBV/analysis
XPath (yahoo): //html//body//div[1]//main
[46020:44220:0507/155232.643:ERROR:ssl_client_socket_impl.cc(879)] handshake 
failed; returned -1, SSL error code 1, net_error -100
[46020:44220:0507/155232.715:ERROR:ssl_client_socket_impl.cc(879)] handshake failed; returned -1, SSL error code 1, net_error -100
Created TensorFlow Lite XNNPACK delegate for CPU.
[46020:44220:0507/155250.118:ERROR:ssl_client_socket_impl.cc(879)] handshake failed; returned -1, SSL error code 1, net_error -101
[46020:44220:0507/155253.627:ERROR:ssl_client_socket_impl.cc(879)] handshake failed; returned -1, SSL error code 1, net_error -101
[46020:44220:0507/155311.143:ERROR:ssl_client_socket_impl.cc(879)] handshake failed; returned -1, SSL error code 1, net_error -101
[46020:44220:0507/155314.677:ERROR:ssl_client_socket_impl.cc(879)] handshake failed; returned -1, SSL error code 1, net_error -101
Raw res (yahoo):  <selenium.webdriver.remote.webelement.WebElement (session="b834d611578747a7fd22548b61b3c64d", element="f.E0B6F84363C879AD4016BE9035E3E4AC.d.2FDBD9DDF021E4D58FDD846A839372AD.e.112")>

如果我尝试使用开发工具控制台和 $x("") 命令访问相同的元素,它会起作用。所以一定是和驱动连接有关。

关于如何解决这个问题有什么想法吗?

python selenium-webdriver
1个回答
0
投票

您可以使用 CSS 选择器获取该值,

div.label.average > span.price
© www.soinside.com 2019 - 2024. All rights reserved.