Selenium 和 AutoHotkey - 如何获取 table rows/column 的大小?
Selenium and AutoHotkey - How to get the size of table rows/column?
我研究了好几个小时都没有成功
我只需要 Autohotkey 的语法来获取 table rows/column
的大小
我正在按照本指南进行操作https://www.guru99.com/handling-dynamic-selenium-webdriver.html
在其他语言中,他们建议这样:
WebElement tbody = driver.findElement(By.xpath("//div[@class='z-listbox-body']/table/tbody"));
List<WebElement> rows = tbody.findElements(By.xpath("tr"));
totalrows = rows.size();
注意他们是用“List”把变量转换成List类型,问题是AHK中没有变量类型定义,应该是自动的,但显然不是这种情况
这是我正在测试的页面,但无法正常运行
http://demo.guru99.com/test/web-table-element.php#
我只需要知道它有多少行and/or列,就这么简单:
MsgBox % "" oChrome.findElementByXpath("//*[@id='leftcontainer']/table/thead/tr/th").size()
(没有错误但不显示任何值)
甚至这个,就像他们建议的那样 ()
MsgBox % "" oChrome.findElementByXpath("//*[@id='leftcontainer']/table/thead/tr/th").Count()
(错误:未知名称,特别是:计数)
目标是获得列数(在本例中为 5)和行数(26),这是为了进一步执行 For Each 并遍历每一行的值
如果有任何建议,我将不胜感激!
完整代码
oChrome := ChromeGet() ; Object for Chrome
MsgBox % "" oChrome.findElementByXpath("//*[@id='leftcontainer']/table/thead/tr/th").Size() ; FAIL
MsgBox % "Finish"
return
ChromeGet(IP_Port := "127.0.0.1:9222") {
oChrome := ComObjCreate("Selenium.ChromeDriver")
oChrome.SetCapability("debuggerAddress", IP_Port)
oChrome.Start()
return oChrome
}
啊,所以,经过几天的研究,我注意到一个更大的东西,我需要使用:
.findElementsByXpath()
而不是:
.findElementByXpath()
我在查看 Python 的 Selenium 文档时注意到了这一点:
https://selenium-python.readthedocs.io/locating-elements.html
这让我想到了上面那个额外的“s”,所以,就是这样!我还使用了 Count()。
它属于一个简单的逻辑(现在我意识到常识),findElementsByXpath(),正如文档所说,搜索多个元素值,而不仅仅是一个,这样你就可以使用“.Count()”来例如,搜索节点中子节点的总数
因此,对我有用的最终代码如下:
oChrome := ChromeGet() ; Object for Chrome
MsgBox % "" oChrome.findElementsByXpath("//*[@id='leftcontainer']/table/thead/tr/th").Count()
MsgBox % "Finish"
return
ChromeGet(IP_Port := "127.0.0.1:9222") {
oChrome := ComObjCreate("Selenium.ChromeDriver")
oChrome.SetCapability("debuggerAddress", IP_Port)
oChrome.Start()
return oChrome
}
我研究了好几个小时都没有成功
我只需要 Autohotkey 的语法来获取 table rows/column
的大小我正在按照本指南进行操作https://www.guru99.com/handling-dynamic-selenium-webdriver.html
在其他语言中,他们建议这样:
WebElement tbody = driver.findElement(By.xpath("//div[@class='z-listbox-body']/table/tbody"));
List<WebElement> rows = tbody.findElements(By.xpath("tr"));
totalrows = rows.size();
注意他们是用“List”把变量转换成List类型,问题是AHK中没有变量类型定义,应该是自动的,但显然不是这种情况
这是我正在测试的页面,但无法正常运行 http://demo.guru99.com/test/web-table-element.php#
我只需要知道它有多少行and/or列,就这么简单:
MsgBox % "" oChrome.findElementByXpath("//*[@id='leftcontainer']/table/thead/tr/th").size()
(没有错误但不显示任何值)
甚至这个,就像他们建议的那样 (
MsgBox % "" oChrome.findElementByXpath("//*[@id='leftcontainer']/table/thead/tr/th").Count()
(错误:未知名称,特别是:计数)
目标是获得列数(在本例中为 5)和行数(26),这是为了进一步执行 For Each 并遍历每一行的值
如果有任何建议,我将不胜感激!
完整代码
oChrome := ChromeGet() ; Object for Chrome
MsgBox % "" oChrome.findElementByXpath("//*[@id='leftcontainer']/table/thead/tr/th").Size() ; FAIL
MsgBox % "Finish"
return
ChromeGet(IP_Port := "127.0.0.1:9222") {
oChrome := ComObjCreate("Selenium.ChromeDriver")
oChrome.SetCapability("debuggerAddress", IP_Port)
oChrome.Start()
return oChrome
}
啊,所以,经过几天的研究,我注意到一个更大的东西,我需要使用:
.findElementsByXpath()
而不是:
.findElementByXpath()
我在查看 Python 的 Selenium 文档时注意到了这一点: https://selenium-python.readthedocs.io/locating-elements.html
这让我想到了上面那个额外的“s”,所以,就是这样!我还使用了 Count()。 它属于一个简单的逻辑(现在我意识到常识),findElementsByXpath(),正如文档所说,搜索多个元素值,而不仅仅是一个,这样你就可以使用“.Count()”来例如,搜索节点中子节点的总数 因此,对我有用的最终代码如下:
oChrome := ChromeGet() ; Object for Chrome
MsgBox % "" oChrome.findElementsByXpath("//*[@id='leftcontainer']/table/thead/tr/th").Count()
MsgBox % "Finish"
return
ChromeGet(IP_Port := "127.0.0.1:9222") {
oChrome := ComObjCreate("Selenium.ChromeDriver")
oChrome.SetCapability("debuggerAddress", IP_Port)
oChrome.Start()
return oChrome
}