在 Python 中使用 Selenium 从表中提取特定元素

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

我正在尝试从设备的网络服务器上显示的表格中提取特定数据。 我在运行我似乎无法理解的代码时遇到错误。 我相信在尝试查找表列上的特定元素(这是无效表达式)时会出现错误。

任何有关此问题的帮助将不胜感激。

谢谢你。

问候

import selenium.webdriver as webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC

##user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'
##edge_driver_path = os.path.join(os.getcwd(), 'msedgedriver.exe')
edge_driver_path = "msedgedriver.exe"
edge_service = Service(edge_driver_path)
edge_options = Options()
edge_options.add_experimental_option('excludeSwitches', ['enable-logging'])
edge_options.add_experimental_option("detach", True)

service = webdriver.EdgeService(log_output="C:/Users/Desktop/WebScraper/tutorial")

browser = webdriver.Edge(service=edge_service, options=edge_options)
browser.get('ipaddress')
WebDriverWait(browser, 60).until(EC.presence_of_element_located((By.ID, "ANALOGINPUTSR0C2")))

comp_table = browser.find_element(By.XPATH,"//table[@id='ANALOGINPUTSbody']")
comp_table_row = comp_table.find_element(By.XPATH,"//tr[contains(@class,'row')]")
comp_table_element = comp_table_row.find_element(By.XPATH,"//td(@id='ANALOGINPUTSR0C2')")

print(comp_table_element.text)

错误如下图所示 文件“c:\Users\Desktop\WebScraper utorial utorial.py”,第 29 行,位于 comp_table_element = comp_table_row.find_element(By.XPATH,"//td(@id='ANALOGINPUTSR0C2')") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ 文件“C:\Users\Desktop\WebScraper utorial.venv\Lib\site-packages\selenium\webdriver emote\webelement.py”,第 417 行,在 find_element 中 return self._execute(Command.FIND_CHILD_ELEMENT, {"using": by, "value": value})["value"] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\Users\Desktop\WebScraper utorial.venv\Lib\site-packages\selenium\webdriver emote\webelement.py”,第 395 行,在 _execute 中 返回 self._parent.execute(命令,参数) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\Users\Desktop\WebScraper utorial.venv\Lib\site-packages\selenium\webdriver emote\webdriver.py”,第 347 行,执行中 self.error_handler.check_response(响应) 文件“C:\Users\Desktop\WebScraper utorial.venv\Lib\site-packages\selenium\webdriver emote rrorhandler.py”,第 229 行,在 check_response 中 引发异常类(消息、屏幕、堆栈跟踪) selenium.common.exceptions.JavascriptException:消息:javascript错误:{“status”:32,“value”:“由于以下错误,无法使用xpath表达式//td(@id ='ANALOGINPUTSR0C2')定位元素: SyntaxError:无法对“文档”执行“评估”:字符串“//td(@id='ANALOGINPUTSR0C2')”不是有效的 XPath 表达式。"} (会话信息:MicrosoftEdge=125.0.2535.51)

我尝试了不同的 XPath 表达式,但这对我来说缩小了问题范围。

python html selenium-webdriver web-scraping
1个回答
0
投票
Unable to locate an element with the xpath expression //td(@id='ANALOGINPUTSR0C2') because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string "//td(@id='ANALOGINPUTSR0C2')" is not a valid XPath expression.

正如您的异常消息所示,xpath

//td(@id='ANALOGINPUTSR0C2')
的格式无效。

您可以将该行更改为以下内容:

comp_table_element = comp_table_row.find_element(By.XPATH,"//td[@id='ANALOGINPUTSR0C2']")
© www.soinside.com 2019 - 2024. All rights reserved.