Report from all 我需要使用 Powershell 来单击该按钮。该页面上有多个-6ren">
gpt4 book ai didi

html - powershell 可以用来点击 angularjs 按钮吗?

转载 作者:技术小花猫 更新时间:2023-10-29 12:53:17 24 4
gpt4 key购买 nike

<div class="w-btn" ng-click="vm.callbacks.compareAll();" ng-if="vm.folderData.projects.length > 0 &amp;&amp; vm.noneSelectedProjects" tabindex="0"><i class="glyphicon glyphicon-transfer btn-icon"></i> Report from all</div>

我需要使用 Powershell 来单击该按钮。该页面上有多个带有 class="w-btn"的 div,但只有一个带有带有 Compare all 的 ng-click。

单击该按钮时,它将更改页面上的另一个标签,如下所示

<a href="/data/project/export/projects-tasks?projectIds[]=103473&amp;projectIds[]=103474&amp;projectIds[]=106186&amp;projectIds[]=108395&amp;projectIds[]=110653&amp;projectIds[]=110657" target="_self" class="inline-btn pull-right" ng-if="vm.projects.length > 0">

第一个按钮在添加项目时更改项目的 href。我必须编写此脚本来单击第一个按钮,然后使用生成的 href 作为我的 wget 中链接的一部分

到目前为止,我还没有得到任何东西来工作

$Link = 'https://url.com/folder/2880'
$html = Invoke-WebRequest -Uri $Link -UseDefaultCredentials
$btnclick = $html.getElementsByTagName("div") | Where-object{$_.Name -like 'ng-click="vm.callbacks.compareAll();"' }

然后当我写到控制台以查看 $btnclick 是什么时,我得到了一个错误:

Method invocation failed because [Microsoft.PowerShell.Commands.HtmlWebResponseObject] does not contain a method named 'getElementsByTagName'

最终,我想我会像 $btnclick.Click() 那样在 href 上做另一个 getElement 这样我就可以拉

/data/project/export/projects-tasks?projectIds[]=103473&amp;projectIds[]=103474&amp;projectIds[]=106186&amp;projectIds[]=108395&amp;projectIds[]=110653&amp;projectIds[]=110657

部分出来。

感谢任何帮助完成这项工作的人。高级概述是我需要从网页中单击一个角度 js 按钮,然后从生成的 href 标记中提取一段 URL 以在 wget 中使用。

最佳答案

Invoke-WebRequest 在 AngularJS 网页中是无用的,因为有客户端 javascript 渲染。您可以为此使用 powershell + selenium + protractor 的组合(需要 Powershell v5):

# initialize selenium
$protractorPackage = Install-Package Protractor -Destination ".\NugetPackages" -Force -Source 'https://www.nuget.org/api/v2' -ProviderName NuGet
Add-Type -Path ".\Selenium.WebDriver.$($protractorPackage.Where({$_.name -eq "Selenium.WebDriver"}).version)\lib\net40\WebDriver.dll"
Add-Type -Path ".\Protractor.$($protractorPackage.Where({$_.name -eq "Protractor"}).version)\lib\net40\Protractor.dll"

# initialize chrome driver
$chromeDriverPackage = Install-Package Selenium.WebDriver.ChromeDriver -Destination "." -Force -Source 'https://www.nuget.org/api/v2' -ProviderName NuGet
$Env:Path += ";" + ((Resolve-Path ".\Selenium.WebDriver.ChromeDriver.$($chromeDriverPackage.Version)\driver\win32") -join ";")
$Selenium = New-Object OpenQA.Selenium.Chrome.ChromeDriver

# interact with website
$Selenium.Manage().Timeouts().SetScriptTimeout([TimeSpan]::FromSeconds(15)) # Configure timeouts (important since Protractor uses asynchronous client side scripts)
$Protractor = New-Object Protractor.NgWebDriver($Selenium)
try
{
$Protractor.Url = "https://url.com/folder/2880"
$Protractor.WaitForAngular() # sync with angular, this waits for all elements to load

$Protractor.FindElement([OpenQA.Selenium.By]::CssSelector('[ng-click="vm.callbacks.compareAll();"]')).Click();

Write-Host "Url is: $($Protractor.Url)"
$FullhtmlDOM = $Protractor.PageSource
Write-Host "Full page source: $FullhtmlDOM"
}
finally
{
$Protractor.Dispose()
}

如果你不想依赖 Chrome 浏览器,你可以使用 headless PhantomJS。它的工作方式相同,您只需下载不同的包:

...
# initialize phantomjs driver
$phantomJsDriverPackage = Install-Package Selenium.WebDriver.PhantomJS -Destination "." -Force -Source 'https://www.nuget.org/api/v2' -ProviderName NuGet
$Env:Path += ";" + ((Resolve-Path ".\Selenium.WebDriver.PhantomJS.$($phantomJsDriverPackage.Version)\driver") -join ";")
$Selenium = New-Object OpenQA.Selenium.PhantomJS.PhantomJSDriver
...

关于html - powershell 可以用来点击 angularjs 按钮吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45716561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com