Selenium:元素无法从 excel 文件进行交互以进行多次咨询

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

我是 selenium 的新手,正在尝试自动化网页。这个想法是把第一个 ID 放在一个盒子里并查询它,然后把第二个 ID 放在一个盒子里并查询它,然后用两个以上的 ID 来做。

这就是 Excel 的样子:

所以我尝试实现下面的代码:

df=pd.read_excel(r'C:/Users/Naniss/Downloads/automatizacion_rues/data.xlsx', dtype=str)

PATH='C:\Program Files (x86)\chromedriver.exe'
driver = webdriver.Chrome(PATH)
driver.get('url')

link= driver.find_element(By.LINK_TEXT, 'ID')
link.click()

ID_BOX = driver.find_element(By.XPATH,'//*[@id="txtSearchMat"]')
consult_button = driver.find_element(By.XPATH,'//*[@id="btnConsultaMat"]')

for i in df.index:
    entry = df.loc[i]  
    ID_BOX.send_keys(entry['ID'])
    consult_button.click()

但是我有下一个错误:

Exception has occurred: ElementNotInteractableException
Message: element not interactable
  (Session info: chrome=112.0.5615.138)
Stacktrace:
Backtrace:
    GetHandleVerifier [0x00D7DCE3+50899]
    (No symbol) [0x00D0E111]
    (No symbol) [0x00C15450]
    (No symbol) [0x00C3C706]
    (No symbol) [0x00C3BFD0]
    (No symbol) [0x00C5B8FC]
    (No symbol) [0x00C38EC6]
    (No symbol) [0x00C5BC54]
    (No symbol) [0x00C6E01C]
    (No symbol) [0x00C5B6F6]
    (No symbol) [0x00C37708]
    (No symbol) [0x00C3886D]
    GetHandleVerifier [0x00FE3EAE+2566302]
    GetHandleVerifier [0x010192B1+2784417]
    GetHandleVerifier [0x0101327C+2759788]
    GetHandleVerifier [0x00E15740+672048]
    (No symbol) [0x00D18872]
    (No symbol) [0x00D141C8]
    (No symbol) [0x00D142AB]
    (No symbol) [0x00D071B7]
    BaseThreadInitThunk [0x76297D49+25]
    RtlInitializeExceptionChain [0x7745B74B+107]
    RtlClearBits [0x7745B6CF+191]
  File "C:\Downloads\automatiz\test.py", line 29, in <module>
    matricula.send_keys(entry['ID'])
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
  (Session info: chrome=112.0.5615.138)
Stacktrace:
Backtrace:
    GetHandleVerifier [0x00D7DCE3+50899]
    (No symbol) [0x00D0E111]
    (No symbol) [0x00C15450]
    (No symbol) [0x00C3C706]
    (No symbol) [0x00C3BFD0]
    (No symbol) [0x00C5B8FC]
    (No symbol) [0x00C38EC6]
    (No symbol) [0x00C5BC54]
    (No symbol) [0x00C6E01C]
    (No symbol) [0x00C5B6F6]
    (No symbol) [0x00C37708]
    (No symbol) [0x00C3886D]
    GetHandleVerifier [0x00FE3EAE+2566302]
    GetHandleVerifier [0x010192B1+2784417]
    GetHandleVerifier [0x0101327C+2759788]
    GetHandleVerifier [0x00E15740+672048]
    (No symbol) [0x00D18872]
    (No symbol) [0x00D141C8]
    (No symbol) [0x00D142AB]
    (No symbol) [0x00D071B7]
    BaseThreadInitThunk [0x76297D49+25]
    RtlInitializeExceptionChain [0x7745B74B+107]
    RtlClearBits [0x7745B6CF+191]

我尝试了不同的方法来解决,比如使用 Workbook 和 xlrd,但我有同样的错误。感谢您的帮助。

编辑

使用下面的代码,我认为我找到了解决方案,但并不是因为算法将第一个条目放在一起并查阅它,然后将第二个条目放在第一个条目后面,这并不是我想要的,理想情况是消除第一个条目然后做第二个咨询消除第一个。

import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.select import Select
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import time


PATH = 'C:\Program Files (x86)\chromedriver.exe'

options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(executable_path=PATH, options=options)
wait = WebDriverWait(driver, 20)
driver.get('https://www.rues.org.co/RM')

link= driver.find_element(By.LINK_TEXT, 'Matrícula / Inscripción')
link.click()
camara = Select(driver.find_element(By.XPATH, '//*[@id="codCamara"]'))


matricula = driver.find_element(By.XPATH,'//*[@id="txtSearchMat"]')
consultar = driver.find_element(By.XPATH,'//*[@id="btnConsultaMat"]')

df=pd.read_excel(r'C:\Downloads\automatiz\data.xlsx', dtype=str)

for i in df.index: 
    entry=df.loc[i]
    camara.select_by_value("55")
    matricula.send_keys(entry['MATRICULA'])
    consultar.click()
    time.sleep(5)
python dataframe selenium-webdriver web-scraping iterable
© www.soinside.com 2019 - 2024. All rights reserved.