Мне нужно получить номера из сценария веб-сайта после определенной строки - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь получить определенную строку чисел (числа меняются по длине при каждой перезагрузке) из тега скрипта на веб-сайте. Тем не менее, я изо всех сил пытаюсь выяснить, как это сделать, поскольку я застрял в PowerShell v2 и не могу обновить его выше.

Мне удалось получить полный сценарий, получив элемент, загрузив сайт в IE и получив элемент по имени тега «script», и я попытался использовать некоторое регулярное выражение, чтобы найти строку, но не могу понять это вне.

Я также попытался удалить символы с передней и задней части сценария, и тогда я понял, что длины чисел меняются каждый раз.

Часть сценария:

var value = document.wizform.selActivities.options[document.wizform.selActivities.selectedIndex].value;
if (value == "Terminate") {
    if (confirm("Are you sure you want to terminate the selected business process(es)?")) {
        document.wizform.action = "./Page?next=page.actionrpt&action=terminate&pos=0&1006999619";
        javascript:document.wizform.submit();
    }
} else if (value == "TerminateAndRestart") {
    if (confirm("Are you sure you want to terminate and restart the selected business process(es)?")) {
        document.wizform.action = "./Page?next=page.actionrpt&action=terminateandrestart&pos=0&237893352";
        javascript:document.wizform.submit();
    }
}

Часть, которую я хочу запечатлеть, это числа здесь

document.wizform.action = "./Page?next=page.actionrpt&action=terminateandrestart&pos=0&237893352";

Код PowerShell, который у меня есть,

$checkbox = $ie.Document.getElementsByTagName("script") | Where-Object {
    $_.outerHTML -like "*./Page?next=page.actionrpt&action=terminate*"
} # | select -Expand outerHTML

$content = $checkbox
$matches = [regex]::Matches($content, '".\action=terminate\.([^"]+)')
$matches | ForEach-Object {
    $_.Groups[1].Value
}

Мне бы хотелось, чтобы в PowerShell было только число в качестве переменной, поэтому в приведенном выше примере я хотел бы иметь возможность либо 0&237893352, либо просто 237893352 (поскольку примечание не меняется, поэтому я могу добавить 0& обратно, если понадобится).

1 Ответ

0 голосов
/ 24 апреля 2019

Используйте положительное утверждение просмотра за задним числом для сопоставления конкретного интересующего вас действия:

$re = '(?<=action=terminateandrestart&pos=)0&\d+'
$content |
    Select-String -Pattern $re |
    Select-Object -Expand Matches |
    Select-Object -Expand Value

(?<=...) - это конструкция регулярного выражения, называемая "положительное утверждение поиска за задним числом", которая позволяет сопоставить что-то, что предшествуетопределенной строкой (в вашем случае "action = terminateandrestart & pos =") без включения этой строки в возвращаемое совпадение.Таким образом, вы можете искать строку «action = terminateandrestart & pos =», за которой следуют «0 &» и одну или несколько цифр (\d+) и возвращать только «0 &» и цифры.

...