PowerShell, как нажать кнопку в веб-форме

Страница https://schneegans.de/windows/unattend-generator — это форма, которая позволяет вам определить, что будет в autounatted.xml для использования при автоматической установке Windows, и в результате получается URL-адрес, содержащий все эти параметры. Теперь, когда у меня есть именно то, что я хочу из опций в форме, я хочу нажать кнопку Download file, которая находится в форме, чтобы я мог загрузить autounattend.xml в свою систему. Я безуспешно пробовал следующее. Может быть, я использую неправильный подход для сбора этого XML-файла?

Как я могу использовать этот URL-адрес и нажать кнопку Download file на этой странице (или любым другим способом в PowerShell, с помощью которого я могу собрать соответствующие XML-данные для autounattend.xml)?

# URL of the page
$url = "https://schneegans.de/windows/unattend-generator/?LanguageMode=Unattended&UILanguage=en-US&UserLocale=en-GB&KeyboardLayout=0809%3A00000809&GeoLocation=242&ProcessorArchitecture=amd64&ComputerNameMode=Custom&ComputerName=Win10&TimeZoneMode=Implicit&PartitionMode=Unattended&PartitionLayout=GPT&EspSize=300&RecoveryMode=Partition&RecoverySize=600&WindowsEditionMode=Unattended&WindowsEdition=pro&UserAccountMode=Unattended&AccountName0=Boss&AccountPassword0=boss&AccountGroup0=Administrators&AccountName1=User&AccountPassword1=user&AccountGroup1=Users&AccountName2=&AccountName3=&AccountName4=&AutoLogonMode=Own&PasswordExpirationMode=Default&LockoutMode=Default&DisableSystemRestore=true&EnableLongPaths=true&EnableRemoteDesktop=true&HardenSystemDriveAcl=true&AllowPowerShellScripts=true&DisableLastAccess=true&NoAutoRebootWithLoggedOnUsers=true&TurnOffSystemSounds=true&DisableAppSuggestions=true&ProcessAudit=true&ProcessAuditCommandLine=true&WifiMode=Skip&ExpressSettings=DisableAll&SystemScript0=&SystemScriptType0=Cmd&SystemScript1=&SystemScriptType1=Ps1&SystemScript2=&SystemScriptType2=Reg&SystemScript3=&SystemScriptType3=Vbs&DefaultUserScript0=&DefaultUserScriptType0=Reg&FirstLogonScript0=&FirstLogonScriptType0=Cmd&FirstLogonScript1=&FirstLogonScriptType1=Ps1&FirstLogonScript2=&FirstLogonScriptType2=Reg&FirstLogonScript3=&FirstLogonScriptType3=Vbs&UserOnceScript0=&UserOnceScriptType0=Cmd&UserOnceScript1=&UserOnceScriptType1=Ps1&UserOnceScript2=&UserOnceScriptType2=Reg&UserOnceScript3=&UserOnceScriptType3=Vbs&WdacMode=Skip"

try {
    # Send request to the page
    $response = Invoke-WebRequest -Uri $url

    # Parse the HTML response
    $html = $response.ParsedHtml

    # Find the download button element
    $downloadButton = $html.querySelector('.btn.btn-primary')

    if ($downloadButton -eq $null) {
        Write-Host "Download button not found."
    }

    # Extract the download link
    $downloadLink = $downloadButton.getAttribute('href')

    # Download the file
    Invoke-WebRequest -Uri $downloadLink -OutFile "autounattend.xml"
    Write-Host "File downloaded successfully."
}
catch {
    Write-Host "Error occurred: $_"
}

Вам нужно загружать его динамически? Есть ли причина, по которой вы не можете просто сгенерировать его вручную как разовый шаг, сохранить как XML-файл (или встроить его как строку в свой сценарий) и использовать в качестве шаблона в своем сценарии? Кроме того, если вы используете кнопку «Просмотреть файл» в самом низу страницы, вы перейдете на URL-адрес с соответствующей строкой запроса — возможно, вы могли бы просто создать этот URL-адрес и строку запроса в своем коде и использовать invoke-restmethod для этого, чтобы получить содержимое unattend.xml, а не отправлять POST форму «загрузить файл»...

mclayton 01.05.2024 12:43

Вы можете открыть инструменты отладчика в своем браузере (с помощью F12), чтобы проверить, какой URL-адрес используется и какие данные публикуются (на вкладке «сеть»). В Chrome и Firefox даже есть опция «копировать в Powershell», которая сгенерирует для вас код PS, включая заголовки и файлы cookie.

bluuf 01.05.2024 12:43

Это обе вещи, о возможности которых я не подозревал, и это здорово (я знал F12, но не знал, что в Chrome и Firefox есть опция «Копировать в PowerShell»!). Мне не нужно нажимать кнопку, и я с радостью воспользуюсь выводом «Просмотр файла», это хорошая идея. Я знаю, что могу делать такие вещи, как (invoke-webrequest $url).RawContent, чтобы увидеть все на странице, но это, вероятно, немного примитивно. Есть ли у вас лучший/более точный метод, который более точно извлечет XML с помощью invoke-restmethod?

YorSubs 01.05.2024 12:57

Вы достигаете ограничений того, что можно сделать с помощью PowerShell. Если вам необходимо взаимодействовать с элементами DOM, вам следует использовать JavaScript, который предназначен именно для этой цели.

Josh 02.05.2024 23:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не нужно нажимать кнопку — просто используйте действия просмотра или загрузки:

$url = 'https://schneegans.de/windows/unattend-generator/view/?LanguageMode=...';
Invoke-WebRequest -Uri $url -OutFile "$env:TEMP\autounattend.xml";

Источник: Я являюсь автором этого сервиса.

Другие вопросы по теме