我想通过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("
关于如何解决这个问题有什么想法吗?
您可以使用 CSS 选择器获取该值,
div.label.average > span.price