Парс ссылки для загрузки файла
Добрый день! Не подскажите, почему парсит ссылку с портабл версией а не с инсталером?
Код:
@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
|
Цитата:
Цитата 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
|
Благодарю вас! Пойду смотреть как и что)
|
DJ Mogarych, Добрый день! У меня с вин-рар проблемы, окажите помощь пожалуйста) по вашим шаблонам получилось несколько нужных мне программ сделать. А вот вин-рар не поддается. Пробовал с офф сайта, там на нескольких страничках можно поймать линки, русской версии ессно. И пробовал с русской версией сайта. Тоже ничего не вышло, во втором варианте вообще левые линки ловит. Можете помочь? В обоих вариантах пробовал так же поймать по *ru.exe тоже не удалось(
|
Так?
Код:
-join ("https://www.rarlab.com", ((iwr https://www.rarlab.com/).Links |? {$_ -match 'ru.exe\b'}).href)
|
благодарю вас!
Цитата:
Цитата NickM
-join ("https://www.rarlab.com", »
|
только не понял вот это что? я код взял от iwr.. все работает :)
|
Цитата:
Цитата a1ek9
только не понял вот это что? »
|
Склейка для получения полной ссылки:
Код:
https://www.rarlab.com/rar/winrar-x64-701ru.exe
Цитата:
Цитата a1ek9
код взял от iwr.. все работает »
|
И, что выводит?
Это?
Код:
/rar/winrar-x64-701ru.exe
|
да, мне этого достаточно :)
Не подскажите еще пример, как в такой ситуации быть, когда парситься по поиску второй индекс а не первый? Вот он ловит портабл версию, хотя выше указан установочник? И такое встречаю не в первый раз( Получается, во всех случаях последний линк забирает, обычно ведь береться первый)
Код:
((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. все сделал, получилось)
|
Попробуйте фильтровать ещё и по .exe, например:
Код:
((iwr https://www.hibitsoft.ir/Uninstaller.html).Links | ? {$_.'class' -match 'btn btnGreen' -and $_.'title' -eq 'Download latest version' -and $_ -match '.exe\b'}).href
|
Цитата:
Цитата NickM
Попробуйте фильтровать ещё и по .exe, например »
|
Не подскажите еще на примере гитхаб, как с раздела релизы парсить самые новые версии? Ну то есть первый линк.
TDesktop-x64 К примеру этот файл 64Gram-setup-x64.1.1.45.exe (тот что нужен мне)
ну и 64Gram_1.1.45_mac.dmg просто для примера (либо любой другой на ваше усмотрение) По .exe отлавливать я думаю не вариант, на некоторых страничках и тьма тьмущая, только если имя файла до версии программы.. но у меня не получилось, ребята что делились своими решениями, на этом и других форумах не помогает. Со вчера с вечера пытаюсь что-то придумать)
|
Цитата:
Цитата 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]
|
Цитата:
Цитата NickM
Может, что-нибудь типа такого подойдёт? »
|
Первый раз такое вижу)) благодарю вас! Это универсальное прям решение :oszone:
|
Цитата:
Цитата NickM
Может, что-нибудь типа такого подойдёт? »
|
Можно еще разочек вас попросить помочь) Если появляются пред-релиз версии он соответственно парсит их. Нельзя например отправить гет запрос на
Код:
https://github.com/TDesktop-x64/tdesktop/releases/latest
и спарсить ссылку с заголовков? вроде в параметре location должна быть ссылка-переадресации? а потом уже спарсить ссылку на сам файл? Если через powershell нельзя то для меня вариант wget скачать и положить рядом с скриптом.
Цитата:
Цитата NickM
Может, что-нибудь типа такого подойдёт? »
|
ну а после обработать уже вашим кодом?
|
Цитата:
Цитата a1ek9
Если появляются пред-релиз версии он соответственно парсит их. »
|
Ну так, фильтруйте по releases, в чём проблема?
Вы можете привести ссылку на пред-релиз?
|
Цитата:
Цитата NickM
Вы можете привести ссылку на пред-релиз? »
|
НУ вот например
Код:
https://github.com/tnodir/fort/releases
Отфильтровать я не знаю как. Слово тест стоит в середине файла, не туда не сюда(
|
Цитата:
Цитата a1ek9
видимо проблемы все таки есть с провайдером. С третьего раза переадресировал! ... У меня с ме*афона раздача, домашнего интернета нету. А мег*фон банит даже выпрямленные ссылки на майл-облако, почему? я не знаю.. »
|
Не улавливаю связь между сценарием, получением ссылки, пред-релизом и загрузкой.
|
Цитата:
Цитата 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]
|
Благодарю вас за подсказку.
Цитата:
Цитата 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]
Вот этот параметр искал по интернету, сайтов 20 облазил перечитал, не смог найти. Искал как в целом работать с фильтрами.
|
Цитата:
Цитата a1ek9
Вот этот параметр искал по интернету, сайтов 20 облазил перечитал, не смог найти. Искал как в целом работать с фильтрами. »
|
about_Comparison_Operators
Что именно не отработало? Какую ошибку Вы получили?
Цитата:
Цитата a1ek9
Немного переписал ваш первый вариант »
|
Понятно.
|
Цитата:
Цитата NickM
Что именно не отработало? Какую ошибку Вы получили? »
|
Сам код рабочий, только фильтр подправить. Я этот код оборачиваю в cmd. Видимо там что-то накосячил. сейчас проверил.
Цитата:
Цитата NickM
about_Comparison_Operators »
|
За линк, спасибо)
|
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 находит но надо править регулярками я не умею(
|
Цитата:
Цитата 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]
Возможно, что Вы ещё не поняли, что на github.com существуют URL'ы /releases, и существуют /releases/latest, где первые включают все выпуски, в том числе альфа/ бета/ тестовые, а вторые - только крайний релиз.
|
Цитата:
Цитата 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
Ну, получите Вы этот тэг и дальше что? »
|
Я не силен в скриптах. Как-то лучше сделать можно?
|
Цитата:
Цитата a1ek9
Как-то лучше сделать можно? »
|
Сделать что?
Цитата:
Цитата NickM
Возможно, что Вы ещё не поняли, что на github.com существуют URL'ы /releases, и существуют /releases/latest, где первые включают все выпуски, в том числе альфа/ бета/ тестовые, а вторые - только крайний релиз. »
|
Цитата:
Цитата a1ek9
вот именно поэтому хочу загружать только стабильные версии программ, а в /releases попадают все, как вы и сказали. »
|
Цитата:
Цитата NickM
а вторые - только крайний релиз. »
|
|
Вот же!
Цитата:
Цитата 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
Код:
# 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$}
|
Цитата:
Цитата 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)
Копируете нужную ссылку, запускаете скрипт, на выходе, в буфере обмена, получите искомое - ссылку на переадресацию.
|
ТСу видимо нужен 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
|
Доброго времени суток! Подскажите пожалуйста как избавиться от этого кошечка?
Конкретно у меня появляется
Код:
@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
|
Цитата:
Цитата a1ek9
избавиться от этого кошечка »
|
пробуйте добавить к iwr -UseBasicParsing или в настройках IE (типа "обозревателя") что-то есть запретное, если установлен до сих пор.
|
Время: 09:50.
© OSzone.net 2001-