powershell - 使用 Powershell 中的 SendKeys 从网站下载文件
问题描述
我正在尝试通过单击文件图标从特定网站下载文件。网站登录有效,但我希望使用击键“TAB”导航到 Excel 文件,最后按“Enter”进行下载。运行代码,但导致 Powershell 文本为“FALSE”。任何建议表示赞赏!谢谢。
参考:表格截图
$url = "https://abcdefg.com"
$username="test@gmail.com"
$password="TestPW"
$ie = New-Object -com internetexplorer.application;
$ie.visible = $true;
$ie.navigate($url);
while ($ie.Busy -eq $true)
{
Start-Sleep -Milliseconds 1000;
}
$ie.Document.getElementById("txtEmail").value = $username
$ie.Document.getElementByID("txtPassword").value=$password
$ie.Document.getElementById("Login").Click();
Start-Sleep -Milliseconds 10000
$obj = new-object -com WScript.Shell
$obj.AppActivate('Internet Explorer')
$obj.SendKeys('{TAB}')
$obj.SendKeys('{TAB}')
$obj.SendKeys('{TAB}')
$obj.SendKeys('{TAB}')
$obj.SendKeys('{Enter}')
解决方案
你为什么这样做而不是使用网络抓取来找到你试图点击的链接,并直接使用链接 URL?
您的帖子实际上是此问答的副本。
SendKeys 可以工作,但它们非常古怪,并且在不同的系统上可能无法按您预期的那样运行。有更好的工具专门用于执行此操作,AutoIT、Selenium、WASP
--- 那个 WASP 工具仍然有效,但很长时间没有更新。
使用带有 Selenium 的 PowerShell 2.0 自动化 Internet Explorer、Firefox 和 Chrome
IE浏览器
接下来,您要从该站点获取 Internet Explorer 驱动程序。我推荐 2.41 版本,因为“从 2014 年 4 月 15 日起,不再支持 IE 6”。这必须驻留在您当前的 PATH 中,因此在您的脚本中,您可能需要修改 PATH 以确保可以在那里找到可执行文件 (IEDriverServer.exe)。如果您想知道是获得 32 位版本还是 64 位版本,请从 32 位开始,即使您拥有 64 位 Windows。
此时,您需要快速实例化 Internet Explorer 并导航到某个地方。伟大的。我们开始做吧。
# Load the Selenium .Net library
Add-Type -Path "C:\selenium\WebDriver.dll" # put your DLL on a local hard drive!
# Set the PATH to ensure IEDriverServer.exe can found
$env:PATH += ";N:\selenium"
# Instantiate Internet Explorer
$ie_object = New-Object "OpenQA.Selenium.IE.InternetExplorerDriver"
# Great! Now we have an Internet Explorer window appear. We can navigate to a new URL:
$ie_object.Navigate().GoToURL( "http://www.bbc.co.uk/languages" )
# This worked! The call won’t return until the page download is complete.
# Next let’s click on a link from the link text:
$link = $ie_object.FindElementByLinkText( "Spanish" )
$link.Click()
# display current URL
$ie_object.Url
Selenium 教程:关于 Selenium WebDriver 你需要知道的一切
OP 更新
至于...
但是该文件没有重定向的 URL
然后您需要更深入地查看该站点,以找到您可以强制单击的文件的锚点。
例子:
# Scrape a web page with PowerShell
$w = Invoke-WebRequest -Uri 'https://www.reddit.com/r/PowerShell'
$w | Get-Member
$w.AllElements
$w.AllElements.Count
$w.Links.Count
$w.Links
$w.Forms
$w.Forms.Fields
$w.Forms[0]
$w.Forms[0].Fields
$w.RawContent
$w.ParsedHtml
一旦找到标签名称或类似名称,您需要对其进行解析以从中获取内容。
$w.AllElements | Where-Object -Property 'TagName' -EQ 'P' | Select-Object -Property 'InnerText'
对于表,您必须挖掘更多。
推荐阅读
- java - windows - 具有特殊字符的用户文件夹 -> class.getResource 返回 null
- html - JavaScript:onclick 不适用于图像
- python - Pandas Dataframe 使用正则表达式检查值是否存在
- laravel - 传递给使用自定义表单请求验证作为参数的函数的参数是什么?
- vue.js - 从 Vuepress 链接到 Vue 主站点
- python-3.x - 分类算法——决策树
- php - php我无法删除表格的一行
- deep-learning - fastai: ValueError: __len__() 应该返回 >= 0
- mysql - 如何修剪sql中的数据
- laravel - 我应该使用什么测试策略来测试锦标赛算法