如何使用PowerShell从网页中提取表格数据

92dk7w1h  于 2023-05-29  发布在  Shell
关注(0)|答案(1)|浏览(481)

请注意,我是PowerShell和HTML的初学者。
我正在尝试使用PowerShell从网页中提取一些表数据。我这样做的方式是通过使用PowerShell和Selenium webdriver来自动打开chrome上的特定网页,登录并导航到带有表格的页面。
该网页依赖于托管以太网交换机的IP地址,因此不幸的是,您无法自行登录该网站进行尝试。我已经上传了一段HTML脚本和网页截图。希望这能帮上忙。
我面临的问题是,每当我尝试提取表数据时,都会返回以下问题或类似问题:

"Exception calling "FindElementByXPath" with "1" argument(s): "no such element: Unable to locate element: 
{"method":"xpath","selector":"//*[@id="blueLinkBold11"]"}
  (Session info: chrome=112.0.5615.138)"
At line:11 char:1
+ $chrome.FindElementByXPath('//*[@id="blueLinkBold11"]').Text
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : NoSuchElementException"

以下是我目前的PowerShell脚本:

$Scriptpath="C:\ATE Solutions\Applications\EA-0113\HABC_Script"

Add-Type -Path "$Scriptpath\WebDriver.dll"


$chrome=New-Object "OpenQA.Selenium.Chrome.ChromeDriver"

$chrome.Navigate().GoToUrl("http://192.168.1.101/login.cgi")

$chrome.FindElementByXPath('//*[@id="password"]').SendKeys('Password1')

$chrome.FindElementByXPath('//*[@id="loginBtn"]').Click()

$chrome.FindElementByXPath('//*[@id="blueLinkBold11"]/div[2]/a/span').Click()

Start-Sleep -Seconds 5

$chrome.FindElementByXPath('//*[@id="tbl2"]/tbody/tr[7]/td[6]').Text

下图显示了我试图提取的表数据及其HTML脚本:

如果您需要更多的信息或更多的图像,请让我知道。
以下是我到目前为止尝试过的列表:
1.对特定表元素使用“findelementsbyxpath”函数。
1.使用“Invoke-WebRequest”函数和以下脚本,
$pagcontent = Invoke-WebRequest -Method GET -Uri“http://192.168.1.101/index.cgi“$TABLE = $pagcontent.ParsedHtml.getElementsByTagName('table ')
这些都返回了一个类似的问题,它无法定位元素。

kh212irz

kh212irz1#

感谢您发送编修。“Nick.McDermaid”和“Jdweng”的评论帮助我解决了我的问题。我发现我在错误的网页上搜索。
虽然chrome上的URL是'http://192.168.1.101/index.cgi',但如果我将鼠标悬停在网页上的'端口状态'按钮上,它会在页面的左下角显示一个不同的URL,'http://192.168.1.101/status.cgi'。如果我使用这个URL并对代码进行一些调整,它就可以工作,并允许我提取所需的数据。
这是我目前的工作脚本,

Add-Type -Path "C:\ATE Solutions\Applications\EA-0113\HABC_Script\WebDriver.dll"
$chrome=New-Object "OpenQA.Selenium.Chrome.ChromeDriver"
$chrome.Manage().Window.Minimize()
$chrome.Navigate().GoToUrl("http://192.168.1.101/login.cgi")
$chrome.FindElementByXPath('//*[@id="password"]').SendKeys('Password1')
$chrome.FindElementByXPath('//*[@id="loginBtn"]').Click()
Start-Sleep -Seconds 2
$chrome.Navigate().GoToUrl("http://192.168.1.101/status.cgi")
$chrome.FindElementByXPath('//*[@id="tbl2"]/tbody').Text
$chrome.Close()
$chrome.Quit()

我使用Labview和Teststand来自动运行这个脚本,并使用powershell.exe组织下面提取的表数据。

"Port Port Description Port Status Speed Linked Speed Flow Control Max MTU

    Auto
    Disable
    10M Half
    10M Full
    100M Half
    100M Full

    Enable
    Disable
    1 Up Auto 1000M Disable 16349
2 Down Auto No Speed Disable 16349
3 Down Auto No Speed Disable 16349
4 Down Auto No Speed Enable 16349
5 Down Auto No Speed Disable 16349"

相关问题