Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Парс ссылки для загрузки файла (http://forum.oszone.net/showthread.php?t=355638)

a1ek9 26-08-2024 13:59 3030287

Парс ссылки для загрузки файла
 
Добрый день! Не подскажите, почему парсит ссылку с портабл версией а не с инсталером?
Код:

@echo off
@for /f "tokens=* usebackq" %%f in (`powershell -command "(wget "https://librewolf.net/installation/windows/").links | ? 'class' -eq 'jsx-3135004230 button text-gray focus:ring primary  ' | select -exp href"`) do @set var=%%f
echo %var%
pause

Пробовал по разному, захват происходит либо второй ссылки, либо вовсе четвёртую(
Вот эту нужно поймать:
Код:

href="https://gitlab.com/api/v4/projects/44042130/packages/generic/librewolf/129.0.2-1/librewolf-129.0.2-1-windows-x86_64-setup.exe"

DJ Mogarych 26-08-2024 14:44 3030288

Powershell (wget не нужен)
Код:

((iwr https://librewolf.net/installation/windows/).ParsedHtml.body.getElementsByClassName('jsx-3135004230 button text-gray focus:ring primary  ') |? ie8_href -match 'setup.exe').ie8_href

a1ek9 26-08-2024 14:56 3030289

Цитата:

Цитата DJ Mogarych
Powershell (wget не нужен) »

Что-то новенькое.. благодарочка! :oszone:

DJ Mogarych 02-09-2024 10:00 3030555

Цитата:

Цитата a1ek9
Добрый вечер! Подскажи пожалуйста, почему не выходит сделать тоже самое по твоему шаблону из этой http://forum.oszone.net/thread-355638.htmlтемы? https://vivaldi.com/ru/download/?platform=windows только вот с этого сайта (64-bit windows), я уже всяко как можно пытался, мунуалы читал у майков, парс происходит а вот ссылку не видит все равно, они даже код совсем недавно изменили. Стало еще проще в плане парса ссылки для загрузки, но увы.. Хочется понять вообщем за что и как цепляться( А в интернете нету почти шаблонов по этому поводу, чтобы как то на примерах научится.

Найти нужные элементы помогает консоль браузера (F12) и поэтапный поиск нужного элемента по выдаче iwr https://vivaldi.com/ru/download/?platform=windows
Код:

((iwr https://vivaldi.com/ru/download/?platform=windows).Links |
? {$_.'data-cpu' -match '64bit' -and $_.'data-os' -eq 'windows'}).href


a1ek9 02-09-2024 14:21 3030566

Цитата:

Цитата DJ Mogarych

Благодарю вас! Пойду смотреть как и что)

a1ek9 01-11-2024 12:52 3032249

DJ Mogarych, Добрый день! У меня с вин-рар проблемы, окажите помощь пожалуйста) по вашим шаблонам получилось несколько нужных мне программ сделать. А вот вин-рар не поддается. Пробовал с офф сайта, там на нескольких страничках можно поймать линки, русской версии ессно. И пробовал с русской версией сайта. Тоже ничего не вышло, во втором варианте вообще левые линки ловит. Можете помочь? В обоих вариантах пробовал так же поймать по *ru.exe тоже не удалось(

NickM 01-11-2024 13:10 3032250

Цитата:

Цитата a1ek9
не удалось »

Так?
Код:

-join ("https://www.rarlab.com", ((iwr https://www.rarlab.com/).Links |? {$_ -match 'ru.exe\b'}).href)

a1ek9 01-11-2024 13:32 3032251

Цитата:

Цитата NickM
Так? »

благодарю вас!
Цитата:

Цитата NickM
-join ("https://www.rarlab.com", »

только не понял вот это что? я код взял от iwr.. все работает :)

NickM 01-11-2024 13:42 3032252

Цитата:

Цитата a1ek9
только не понял вот это что? »

Склейка для получения полной ссылки:
Код:

https://www.rarlab.com/rar/winrar-x64-701ru.exe
Цитата:

Цитата a1ek9
код взял от iwr.. все работает »

И, что выводит?

Это?
Код:

/rar/winrar-x64-701ru.exe

a1ek9 01-11-2024 13:49 3032255

Цитата:

Цитата NickM
Это? »

да, мне этого достаточно :)
Не подскажите еще пример, как в такой ситуации быть, когда парситься по поиску второй индекс а не первый? Вот он ловит портабл версию, хотя выше указан установочник? И такое встречаю не в первый раз( Получается, во всех случаях последний линк забирает, обычно ведь береться первый)
Код:

((iwr https://www.hibitsoft.ir/Uninstaller.html).Links | ? {$_.'class' -match 'btn btnGreen' -and $_.'title' -eq 'Download latest version'}).href"`)
Код:

<a href="HiBitUninstaller/HiBitUninstaller-setup-3.2.40.exe" class="btn btnGreen" title="Download latest version"> Installable version </a>
<a href="HiBitUninstaller/HiBitUninstaller-Portable-3.2.40.zip" class="btn btnGreen" title="Download latest version"> Portable version </a>

upd. все сделал, получилось)

NickM 01-11-2024 14:07 3032257

Попробуйте фильтровать ещё и по .exe, например:
Код:

((iwr https://www.hibitsoft.ir/Uninstaller.html).Links | ? {$_.'class' -match 'btn btnGreen' -and $_.'title' -eq 'Download latest version' -and $_ -match '.exe\b'}).href

a1ek9 02-11-2024 13:56 3032298

Цитата:

Цитата NickM
Попробуйте фильтровать ещё и по .exe, например »

Не подскажите еще на примере гитхаб, как с раздела релизы парсить самые новые версии? Ну то есть первый линк.
TDesktop-x64 К примеру этот файл 64Gram-setup-x64.1.1.45.exe (тот что нужен мне)
ну и 64Gram_1.1.45_mac.dmg просто для примера (либо любой другой на ваше усмотрение) По .exe отлавливать я думаю не вариант, на некоторых страничках и тьма тьмущая, только если имя файла до версии программы.. но у меня не получилось, ребята что делились своими решениями, на этом и других форумах не помогает. Со вчера с вечера пытаюсь что-то придумать)

NickM 02-11-2024 16:04 3032305

Цитата:

Цитата a1ek9
но у меня не получилось, ребята что делились своими решениями, на этом и других форумах не помогает. Со вчера с вечера пытаюсь что-то придумать) »

А, что предлагали?

Может, что-нибудь типа такого подойдёт?
Код:

$assets = (iwr https://api.github.com/repos/TDesktop-x64/tdesktop/releases| ConvertFrom-Json).assets | Where-Object name -like "*.exe"; $downloadurl = $assets.browser_download_url; $downloadurl[0]

a1ek9 02-11-2024 20:40 3032308

Цитата:

Цитата NickM
Может, что-нибудь типа такого подойдёт? »

Первый раз такое вижу)) благодарю вас! Это универсальное прям решение :oszone:

a1ek9 04-11-2024 12:57 3032356

Цитата:

Цитата NickM
Может, что-нибудь типа такого подойдёт? »

Можно еще разочек вас попросить помочь) Если появляются пред-релиз версии он соответственно парсит их. Нельзя например отправить гет запрос на
Код:

https://github.com/TDesktop-x64/tdesktop/releases/latest
и спарсить ссылку с заголовков? вроде в параметре location должна быть ссылка-переадресации? а потом уже спарсить ссылку на сам файл? Если через powershell нельзя то для меня вариант wget скачать и положить рядом с скриптом.
Цитата:

Цитата NickM
Может, что-нибудь типа такого подойдёт? »

ну а после обработать уже вашим кодом?

NickM 04-11-2024 13:16 3032359

Цитата:

Цитата a1ek9
Если появляются пред-релиз версии он соответственно парсит их. »

Ну так, фильтруйте по releases, в чём проблема?

Вы можете привести ссылку на пред-релиз?

a1ek9 04-11-2024 13:21 3032360

Цитата:

Цитата NickM
Вы можете привести ссылку на пред-релиз? »

НУ вот например
Код:

https://github.com/tnodir/fort/releases
Отфильтровать я не знаю как. Слово тест стоит в середине файла, не туда не сюда(

NickM 04-11-2024 13:23 3032361

Цитата:

Цитата a1ek9
видимо проблемы все таки есть с провайдером. С третьего раза переадресировал! ... У меня с ме*афона раздача, домашнего интернета нету. А мег*фон банит даже выпрямленные ссылки на майл-облако, почему? я не знаю.. »

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

NickM 04-11-2024 13:53 3032362

Цитата:

Цитата a1ek9
Отфильтровать я не знаю как. Слово тест стоит в середине файла, не туда не сюда( »

Например:
Код:

$assets = (iwr https://api.github.com/repos/tnodir/fort/releases| ConvertFrom-Json).assets| Where-Object {$_.name -like "*.exe" -and $_.name -notlike "*test*"}; $downloadurls = $assets.browser_download_url; $downloadurls[0]

a1ek9 04-11-2024 15:02 3032363

Цитата:

Цитата NickM
Например: »

Благодарю вас за подсказку.
Цитата:

Цитата NickM
$assets = (iwr https://api.github.com/repos/tnodir/fort/releases| ConvertFrom-Json).assets| Where-Object {$_.name -like "*.exe" -and $_.name -notlike "*test*"}; $downloadurls = $assets.browser_download_url; $downloadurls[0] »

Этот код не отработал. Немного переписал ваш первый вариант
Код:

(iwr https://api.github.com/repos/tnodir/fort/releases| ConvertFrom-Json).assets | Where-Object name -notlike "*test*" | Where-Object name -like "*x86_64.exe"; $downloadurl = $assets.browser_download_url; $downloadurl[0]
Цитата:

Цитата NickM
-notlike »

Вот этот параметр искал по интернету, сайтов 20 облазил перечитал, не смог найти. Искал как в целом работать с фильтрами.

NickM 04-11-2024 15:53 3032364

Цитата:

Цитата a1ek9
Вот этот параметр искал по интернету, сайтов 20 облазил перечитал, не смог найти. Искал как в целом работать с фильтрами. »

about_Comparison_Operators

Цитата:

Цитата a1ek9
Этот код не отработал. »

Что именно не отработало? Какую ошибку Вы получили?

Цитата:

Цитата a1ek9
Немного переписал ваш первый вариант »

Понятно.

a1ek9 04-11-2024 16:02 3032365

Цитата:

Цитата NickM
Что именно не отработало? Какую ошибку Вы получили? »

Сам код рабочий, только фильтр подправить. Я этот код оборачиваю в cmd. Видимо там что-то накосячил. сейчас проверил.
Цитата:

Цитата NickM
about_Comparison_Operators »

За линк, спасибо)

a1ek9 08-11-2024 20:53 3032594

NickM, Добрый вечер! Не подскажите как извлечь все таки ссылку на переадресацию? Не везде указывают beta,pre-release и так далее..
Код:

Invoke-WebRequest -Uri https://github.com/paintdotnet/release/releases/latest
В данном случае, переадресация идет на
Код:

https://github.com/paintdotnet/release/releases/tag/v5.0.13
или думаю в окне cmd парс сделать, через find находит но надо править регулярками я не умею(

NickM 08-11-2024 21:51 3032602

Цитата:

Цитата a1ek9
Не подскажите как извлечь все таки ссылку на переадресацию? »

Не совсем понятно, что Вы хотите получить:

Код:

$assets = (iwr https://api.github.com/repos/paintdotnet/release/releases/latest| ConvertFrom-Json).assets| Where-Object {$_.name -like "*.x64.zip"}; $downloadurls = $assets.browser_download_url; $downloadurls[0]
Код:

https://github.com/paintdotnet/release/releases/download/v5.0.13/paint.net.5.0.13.install.x64.zip
Цитата:

Цитата a1ek9
В данном случае, переадресация идет на »

Ну, получите Вы этот тэг и дальше что?

Код:

$tag = ((iwr https://github.com/paintdotnet/release/releases/latest).links |? {$_ }).href | Select-String '\/tag\/'; ($tag -split ('\/'))[0,5]
Код:

v5.0.13
Возможно, что Вы ещё не поняли, что на github.com существуют URL'ы /releases, и существуют /releases/latest, где первые включают все выпуски, в том числе альфа/ бета/ тестовые, а вторые - только крайний релиз.

a1ek9 09-11-2024 11:59 3032621

Цитата:

Цитата NickM
Возможно, что Вы ещё не поняли, что на github.com существуют URL'ы /releases, и существуют /releases/latest, где первые включают все выпуски, в том числе альфа/ бета/ тестовые, а вторые - только крайний релиз. »

Понял, вот именно поэтому хочу загружать только стабильные версии программ, а в /releases попадают все, как вы и сказали. Спасибо вам, позже попробую)
Цитата:

Цитата NickM
Ну, получите Вы этот тэг и дальше что? »

Код:

@for /f "tokens=* usebackq" %%f in (`powershell -command "$tag = ((iwr https://github.com/paintdotnet/release/releases/latest).links |? {$_ }).href | Select-String '\/tag\/'; ($tag -split ('\/'))[0,5]"`) do @set var1=%%f
@for /f "tokens=* usebackq" %%f in (`powershell -command "((Invoke-WebRequest -Uri https://github.com/paintdotnet/release/releases/expanded_assets/%var1%).Links |? {$_ -match 'install.x64.zip\b'}).href"`) do @set var=%%f

Цитата:

Цитата a1ek9
Ну, получите Вы этот тэг и дальше что? »

Я не силен в скриптах. Как-то лучше сделать можно?

NickM 09-11-2024 13:47 3032625

Цитата:

Цитата a1ek9
Как-то лучше сделать можно? »

Сделать что?

Цитата:

Цитата NickM
Возможно, что Вы ещё не поняли, что на github.com существуют URL'ы /releases, и существуют /releases/latest, где первые включают все выпуски, в том числе альфа/ бета/ тестовые, а вторые - только крайний релиз. »

Цитата:

Цитата a1ek9
вот именно поэтому хочу загружать только стабильные версии программ, а в /releases попадают все, как вы и сказали. »

Цитата:

Цитата NickM
а вторые - только крайний релиз. »


a1ek9 09-11-2024 13:50 3032626

Цитата:

Цитата NickM
Сделать что? »

получить
Цитата:

Цитата NickM
только крайний релиз. »


NickM 09-11-2024 13:52 3032627

Вот же!
Цитата:

Цитата NickM
Код:

$assets = (iwr https://api.github.com/repos/paintdotnet/release/releases/latest| ConvertFrom-Json).assets| Where-Object {$_.name -like "*.x64.zip"}; $downloadurls = $assets.browser_download_url; $downloadurls[0]
Код:

https://github.com/paintdotnet/release/releases/download/v5.0.13/paint.net.5.0.13.install.x64.zip
»


SQLai Lama 10-11-2024 17:27 3032663

Код:

(iwr https://librewolf.net/installation/windows).links.where{$_.href -match 'gitlab.+exe$'}.href
Цитата:

Цитата NickM
Вот же!

Код:

# choco install yq
(iwr https://api.github.com/repos/paintdotnet/release/releases/latest).content | yq -o=json -r '[.assets[]|select(.name=="*x64.zip").browser_download_url]|.[0]'

Ну или нативными средствами одной строкой, без разбиения на подкоманды:
Код:

(ConvertFrom-Json (iwr https://api.github.com/repos/paintdotnet/release/releases/latest).content).assets.browser_download_url.where{$_ -like '*.install.x64.zip$}

Uragan66 19-11-2024 18:24 3033306

Цитата:

Цитата a1ek9
Не подскажите как извлечь все таки ссылку на переадресацию? »

a1ek9, могу предложить такой код:
Код:

[System.Net.ServicePointManager]::SecurityProtocol = @("Tls12","Tls11","Tls","Ssl3")
function Get-TargetLink {[CmdletBinding()]
    param(
        [Parameter ( Mandatory , ValueFromPipeline )]
        [ValidateNotNullOrEmpty()][Uri]$Url
    )
    try {
        $webRequest  = [net.WebRequest]::Create($url)
        $webRequest.Timeout = 12288
        [string]$webRequest.GetResponse().ResponseUri
    }catch  { Write-verbose "$url`n$_" }
    finally {if ($webRequest) { $webRequest.Abort()}}
}

$aContent  = Get-Clipboard -Format 'Text' -TextFormatType 'UnicodeText'

$aContent | ForEach {Get-TargetLink $_ -Verbose} | Set-Clipboard

[console]::beep(500,1000)

Копируете нужную ссылку, запускаете скрипт, на выходе, в буфере обмена, получите искомое - ссылку на переадресацию.

Sham 20-11-2024 07:26 3033322

ТСу видимо нужен HTTP-заголовок Location.
для старых версий PS
Код:

(iwr -uri https://github.com/paintdotnet/release/releases/latest -MaximumRedirection 0 -method HEAD -ea SilentlyContinue).headers.location
для новых PS core (со SkipHttpErrorCheck иначе ругается)
Код:

(iwr -uri https://github.com/paintdotnet/release/releases/latest -MaximumRedirection 0 -method HEAD -ea SilentlyContinue -SkipHttpErrorCheck).headers.location

a1ek9 05-12-2024 20:51 3033887

Доброго времени суток! Подскажите пожалуйста как избавиться от этого кошечка?
Конкретно у меня появляется
Код:

@for /f "tokens=* usebackq" %%f in (`powershell -command "((iwr https://sdi-tool.org/download/).Links | ? {$_.'href' -match 'https://sdi-tool.org/releases/SDI_R' -and $_.'class' -eq 'download_button'}).href"`) do @set var=%%f

Sham 06-12-2024 06:54 3033889

Цитата:

Цитата a1ek9
избавиться от этого кошечка »

пробуйте добавить к iwr -UseBasicParsing или в настройках IE (типа "обозревателя") что-то есть запретное, если установлен до сих пор.


Время: 09:50.

Время: 09:50.
© OSzone.net 2001-