我正在尝试从设备的网络服务器上显示的表格中提取特定数据。 我在运行我似乎无法理解的代码时遇到错误。 我相信在尝试查找表列上的特定元素(这是无效表达式)时会出现错误。
任何有关此问题的帮助将不胜感激。
谢谢你。
问候
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 表达式,但这对我来说缩小了问题范围。
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']")