Загрузите файл с веб-сайта, используя SendKeys в Powershell - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь загрузить файл с определенного веб-сайта, нажав на значок файла.Вход на сайт работает, но я надеюсь использовать клавишу «TAB» для перехода к файлу Excel и, наконец, нажать «Enter» для загрузки.Запустил код, но в результате получился текст Powershell "FALSE".Любой совет приветствуется!Спасибо.

Ссылка: скриншот таблицы

enter image description here

$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}')

1 Ответ

0 голосов
/ 07 марта 2019

Почему вы делаете это против , используя веб-очистку , чтобы найти ссылку, по которой вы пытаетесь перейти, и напрямую используете URL ссылки?

Ваше сообщение действительно дублирует эти вопросы и ответы.

Используйте PowerShell для автоматизации входа на сайт и загрузки файлов

SendKeys могут работать, но ониочень странный и в разных системах может работать не так, как вы ожидаете.Для этого есть более совершенные инструменты: AutoIT , Selenium , WASP

--- Этот инструмент WASP все еще работает, но небыл обновлен в течение длительного времени.

Использование PowerShell 2.0 с Selenium для автоматизации Internet Explorer, Firefox и Chrome

Internet Explorer

Далее вы хотите получить драйвер Internet Explorer с этого сайта.Я рекомендую версию 2.41, поскольку «по состоянию на 15 апреля 2014 года 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'

Для таблиц нужно копать больше.

Извлечение таблиц из PowerShell Invoke-WebRequest

...