【问题标题】:How to resolve this error on came from Xpath?如何解决来自 Xpath 的此错误?
【发布时间】:2021-05-14 08:09:26
【问题描述】:

使用下面的代码,我想通过 xpath 提取黄金价格,然后使用线性回归进行基本预测。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from sklearn.linear_model import LinearRegression
import time
import numpy as np
from sklearn.svm import SVR
import pytz
from datetime import datetime
from sys import argv
import os, psutil

################################################
if len(argv) != 5:
  print (argv[0] + '<train count> <timeout(s)> <predict date(Y/M/D)> <predict clock(H:M:S)>')
  sys.exit(2)
X_predict = [(int(datetime.strptime(argv[3] + " " + argv[4], '%Y/%m/%d %H:%M:%S').timestamp()*(10000000)))]
################################################

X=[]
y=[]
#driver = webdriver.Chrome()
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://goldprice.org/live-gold-price.html')

elem_xpath = '//[@id="gpxtickerLeft_price"]'

for i in range(1, int(argv[1])):
    try:
        elem = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, elem_xpath)))
        print ("train => ", i)
        X.append(int(time.time()*(10000000)))
        y.append(int(elem.text.replace(',', '')))
        time.sleep(int(argv[2]))
    finally:
        driver.quit
        
##############################################
X = np.array(X).reshape(-1, 1)
y = np.array(y).reshape(-1, 1)
X_predict = np.array(X_predict).reshape(-1, 1)
##############################################
    
svr_rbf = LinearRegression()
y_rbf = svr_rbf.fit(X,y).predict(X_predict)

##########################################
#print ('X:'.format(X))
#print ('y:'.format(y))
#print ('X_predict:{}'.format(X_predict))
##########################################

print ('y_rbf: {}'.format(int(y_rbf)))
print('memory usage: {} MB'.format(
int(psutil.Process(os.getpid()).memory_info().rss/1024/1024)
)) 


但执行脚本后出现以下错误:


C:\Users\Lev\Desktop>python mls.py 6 3 2020/12/11 12:43:06


[WDM] - ====== WebDriver manager ======
[WDM] - Current google-chrome version is 90.0.4430
[WDM] - Get LATEST driver version for 90.0.4430
[WDM] - Driver [C:\Users\Lev\.wdm\drivers\chromedriver\win32\90.0.4430.24\chrome
driver.exe] found in cache

DevTools listening on ws://127.0.0.1:6275/devtools/browser/10d6bc25-3034-4ca7-a4
37-c0cf39c86274
[4412:5028:0514/123522.805:ERROR:device_event_log_impl.cc(214)] [12:35:22.805] F
IDO: webauthn_api.cc:54 Windows WebAuthn API failed to load
[5524:4228:0514/123532.459:ERROR:ssl_client_socket_impl.cc(947)] handshake faile
d; returned -1, SSL error code 1, net_error -100
[5524:4228:0514/123533.786:ERROR:ssl_client_socket_impl.cc(947)] handshake faile
d; returned -1, SSL error code 1, net_error -100
[5524:4228:0514/123538.624:ERROR:ssl_client_socket_impl.cc(947)] handshake faile
d; returned -1, SSL error code 1, net_error -100
[5524:4228:0514/123538.825:ERROR:ssl_client_socket_impl.cc(947)] handshake faile
d; returned -1, SSL error code 1, net_error -100
Traceback (most recent call last):
  File "mls.py", line 32, in <module>
    elem = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.
XPATH, elem_xpath)))
  File "D:\Python38\lib\site-packages\selenium\webdriver\support\wait.py", line
80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

行“[5524:4228:0514/123533.786:ERROR:ssl_client_socket_impl.cc(947)] 握手失败 d;返回 -1,SSL 错误代码 1,net_error -100" 只是不断收到垃圾邮件。

我猜 Xpatch 是错误的。

【问题讨论】:

    标签: python selenium xpath


    【解决方案1】:

    XPath 应该是

    //span[@id="gpxtickerLeft_price"]
    

    你用过:

    //[@id="gpxtickerLeft_price"]
    

    带 [] 的部分称为谓词。见this page for some example

    它需要一个节点或属性来过滤。 // 不是节点。

    节点示例:

    //div
    //*
    //text()
    //@id
    

    【讨论】:

    • 错误:回溯(最近一次调用最后一次):文件“mls.py”,第 35 行,在 y.append(int(elem.text.replace(',', '' ))) ValueError: int() 以 10 为基数的无效文字:'1833.27'
    • 不再是 XPath 问题了吗?那是以下问题?我提出一个新问题?
    • 希望避免创建多任务线程。好的
    • Google 是你的朋友,这个答案对你有帮助吗:stackoverflow.com/a/8948303/3710053
    【解决方案2】:

    是的,您的 xpath 缺少标签名称。
    所以应该是//span[@id="gpxtickerLeft_price"]或者//*[@id="gpxtickerLeft_price"]

    【讨论】:

      【解决方案3】:

      这个 id gpxtickerLeft_price 代表三个 web 元素(除了 2 之外,不是所有的都有前缀)。你现在有两个选择:

      1. 使用 find_elements

      2. 为网络元素编写 3 个不同的定位器。

      代码:

      elem = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'gpxtickerLeft_price')))
      

      阅读更多为什么 xpath 比 ID here 更受欢迎

      【讨论】:

      • 谢谢,但我现在得到值错误: Traceback (last recent call last): File "mls.py", line 35, in y.append(int(elem.text.replace (',', ''))) ValueError: int() 基数为 10 的无效文字:'1833.27'
      • 如何转换它来解决问题?
      • @SamBorov :那不是因为我给你的 ID。那是因为.append(),请为此提出不同的票。
      【解决方案4】:

      我认为问题也与您的浏览器驱动程序版本有关。在日志中,我可以看到你有 google chrome version:: 90.0.4430,但是 chromedriver 版本是旧的。

      1. 请尝试通过转到命令提示符并运行命令 :: taskkill /F /IM chromedriver 来删除此 chromedriver.exe 版本。 exe.

      2. 然后从here 安装新的 chromedriver.exe(取决于您的机器)。

      3. 在您的代码中使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-03
        • 1970-01-01
        • 1970-01-01
        • 2017-12-12
        • 2012-02-14
        • 2015-04-12
        • 2016-06-21
        相关资源
        最近更新 更多