Forum PCLab.pl: Prosty skrypt otwierający link w przeglądarce - Forum PCLab.pl

Skocz do zawartości


Otwarty

Ikona Ostatnio dodane tematy

Ikona Najnowsze pliki

Strona 1 z 1
  • Nie możesz rozpocząć nowego tematu
  • Nie możesz odpowiadać w tym temacie

Prosty skrypt otwierający link w przeglądarce ence pence mam dwie lewe ręce Oceń temat: -----

#1 Użytkownik jest niedostępny   ziCk_lodz 

  • Emigrant
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 22398
  • Dołączył: So, 26 Sie 06

Napisany 20 Październik 2019 - 07:46

Potrzebuję wyprodukować skrypt działający w tle który pingował by adres raz na kilka minut i w razie braku odpowiedzi otwierał link w przeglądarce i kontynuował pingowanie.

Jak to najprościej wykonać?

#2 Użytkownik jest niedostępny   januzi 

  • ^ patryjota, katolig, bochater
  • Ikona
  • Grupa: Moderatorzy
  • Postów: 35669
  • Dołączył: Nd, 08 Cze 03

Napisany 20 Październik 2019 - 17:14

ma być na stronie, w bashu, w windowsie?

#3 Użytkownik jest niedostępny   ziCk_lodz 

  • Emigrant
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 22398
  • Dołączył: So, 26 Sie 06

Napisany 20 Październik 2019 - 23:41

Wiedziałem, że o czymś zapomniałem :E Windows.

#4 Użytkownik jest niedostępny   209458 

  • Uzależniony od forum
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 13565
  • Dołączył: Wt, 15 Sty 08

Napisany 21 Październik 2019 - 10:46

Ja bym zrobił w powershellu, ping to jedna instrukcja, otarcie przeglądarki to druga. OK, sparsowanie wyników pinga to kilka dodatkowych. Taki skrypt można sobie odpalić w oknie w tle. Zrobienie z tego usługi windowsowej do chyba przesadna komplikacja, ale jak ma być co kilka minut, to można to wpiąć w harmonogram zadań (czy jak to się teraz nazywwa) i tez będzie dobrze.

#5 Użytkownik jest niedostępny   ziCk_lodz 

  • Emigrant
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 22398
  • Dołączył: So, 26 Sie 06

Napisany 22 Październik 2019 - 20:49

Ok siłą google ulepiłem takiego Frankensteina z różnych źródeł:

$sites = "google.com","youtube.com","hexus.net"
$time = Get-Date -Format G


Foreach ($site in $sites) {

    $ping = Test-Connection -ComputerName $site -Count 4 -ErrorAction SilentlyContinue

    if ($ping) {
       Write-output "$time  [OK]  $site respond to pings" | Out-File 'H:\Liberty-izone\log.txt' -Append
        }Else{
    if (($ping) -ne $true) {
        Write-output "$time [ERROR] $site failed to respond. Attempting reconnect" | Out-File 'H:\Liberty-izone\log.txt' -Append
        $IE=new-object -com internetexplorer.application 
        $IE.navigate2("moj_adres_url") 
        $IE.visible=$false
        $IE.close
        }
    }   
}

Generalnie skrypt z grubsza robi to co chcę żeby robił (czyt. działa), ale nie do końca tak jak bym chciał - a nie mam zielonego pojęcia o skryptowaniu PowerShella (albo czegokolwiek innego...)

Problemy:
1) po failu pinga google.com nie próbuje pingować innych stron (albo próbuje, ale nie zapisuje wyniku w logach)
22/10/2019 21:21:53 [ERROR] google.com failed to respond. Attempting reconnect
22/10/2019 21:22:14  [OK]   google.com respond to pings

2) wydaje mi się (jak już wspomniałem, nie mam o tym pojęcia), że pierwszy fail pinga powoduje otworzenie linku w przeglądarce - czyt. jeżeli z 4 pingów jeden sfailuje to link jest otwierany. Chciałbym, żeby skrypt brał całość pod uwagę, a nie reagował przy pierwszym failu
3) $IE.close wypluwa error i nie zamyka procesu Internet Explorera. edit: podmieniłem na Stop-Process -Name "iexplore" -Force i hula.
4) Nie wiem jak do końca jak ustawić, żeby skrypt się odpalał co 5 minut + nie otwierał okna konsoli (wszystko powinno dziać się w tle, bez deaktywowania obecnie aktywnego okna)

Ten post był edytowany przez ziCk_lodz dnia: 22 Październik 2019 - 22:05


#6 Użytkownik jest niedostępny   januzi 

  • ^ patryjota, katolig, bochater
  • Ikona
  • Grupa: Moderatorzy
  • Postów: 35669
  • Dołączył: Nd, 08 Cze 03

Napisany 22 Październik 2019 - 20:52

koniecznie potrzebujesz tego ie? czy chcesz, żeby odpalił się skrypt php pod tym adresem?

#7 Użytkownik jest niedostępny   ziCk_lodz 

  • Emigrant
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 22398
  • Dołączył: So, 26 Sie 06

Napisany 22 Październik 2019 - 20:56

Zobacz postjanuzi, o 22 Październik 2019 - 21:52, napisał(a):

koniecznie potrzebujesz tego ie? czy chcesz, żeby odpalił się skrypt php pod tym adresem?

A to tak się da? :E


edit:
zamiast
$IE.Close()


dodałem:
        Start-Sleep -Seconds 5
        Stop-Process -Name "iexplore" -Force 
        Stop-Process -Name "ielowutil" -Force


I ubija proces po 5 sekundach - best start-sleep proces był ubijany zanim przeglądarka była w stanie otworzyć adres :thumbup: :E

Ten post był edytowany przez ziCk_lodz dnia: 22 Październik 2019 - 22:04


#8 Użytkownik jest niedostępny   ziCk_lodz 

  • Emigrant
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 22398
  • Dołączył: So, 26 Sie 06

Napisany 22 Październik 2019 - 22:46

Zobacz postziCk_lodz, o 22 Październik 2019 - 21:49, napisał(a):

4) Nie wiem jak do końca jak ustawić, żeby skrypt się odpalał co 5 minut + nie otwierał okna konsoli (wszystko powinno dziać się w tle, bez deaktywowania obecnie aktywnego okna)

Dodałem skrypt do Harmonogramu Zadań, żeby się potwarzał co 5 minut, ale po odpaleniu skrypt lata non-stop. Czyt. otwiera adres url w IE, ale już nie zamyka procesu ani nie zapisuje nic w logach - za to skrypt odpala się średnio co kilkanaście sekund. :hmm:



edit:
Idąc za sugestią @januzi i spróbowaniem wget, okazuje się, że PowerShell ma swój odpowiednik. Zastąpiłem całą zmienną $IE na Invoke-WebRequest i hula.

Invoke-WebRequest -UseBasicParsing mój_adres_url


Teraz tylko jak poprawnie ustawić pingowanie kilku stron i wykonanie akcji dopiero po braku odpowiedzi ze wszystkich, bo ten potworek którego wkleiłem wcześniej nie sprawdza nic poza pierwszym adresem.

Ten post był edytowany przez ziCk_lodz dnia: 23 Październik 2019 - 01:32


#9 Użytkownik jest niedostępny   ziCk_lodz 

  • Emigrant
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 22398
  • Dołączył: So, 26 Sie 06

Napisany 23 Październik 2019 - 04:40

Dobra przepisałem to z nowo zdobytą wiedzą:
$time = Get-Date -Format G
$list = "google.com", "hotmail.com", "yahoo.com"
$ping = Test-Connection -ComputerName $list -Count 1 -BufferSize 6 -Quiet

    if (($ping -eq $True).Count -gt 0) {
        Write-output "$time [OK] Connection success" | Out-File 'C:\log\log.txt' -Append
    } else {
        Write-Output "$time [ERROR] failed to respond. Attempting to reconnect" | Out-File 'C:\log\log.txt' -Append
        Invoke-WebRequest -UseBasicParsing https://moj_adres_url
    }


Pinguje strony jedną po drugiej, daje output True albo False, sprawdza czy jest chociaż jedno True i jeżeli jest to nie robi nic (chyba :D), a jak nie ma żadnego True to wykonuje Invoke-WebRequest.

Nie mogę teraz zrobić, żeby skrypt się odpalał co 5 minut. Wrzuciłem w Harmonogram, ustawiłem czas, najwyższe przywileje, ale nic się nie dzieje. Skrypt działa, bo manualne odpalenie z Harmonogramu wykonuje go poprawnie. Jakieś sugestie? edit: nie wiem dlaczego skrypt się nie odpala od użytkownika z przywilejami administracyjnymi, ale po zmianie użytkownika na SYSTEM skrypt działa bez zażutu. :hmm:

Ten post był edytowany przez ziCk_lodz dnia: 23 Październik 2019 - 05:59


#10 Użytkownik jest niedostępny   Bono[UG] 

  • Wiecznie niewyspany...
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 20113
  • Dołączył: Pt, 27 Wrz 02

Napisany 23 Październik 2019 - 13:30

Trzeba by się wgłębić w działanie systemu. Kiedyś pod linuksem mieliśmy przypadek, ze program odpalany "z palca" działał bez problemu, a uruchamiany ze skryptu startowego systemu wywalał się. Problem tkwił w dostępie do konsoli, która z poziomu skryptów startowych jest inaczej obsługiwana, więc przeoczony wypis na ekran prowadził do błędu.
W Win może być podobnie, że skrypty uruchamiane z harmonogramu działają w inne powłoce niż użytkownika. Ale to są moje domysły, trzeba by pogrzebać w sieci.

#11 Użytkownik jest niedostępny   ziCk_lodz 

  • Emigrant
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 22398
  • Dołączył: So, 26 Sie 06

Napisany 23 Październik 2019 - 22:35

Teraz mi powiedzcie jak to co zrobiłem zapętlić, żeby w razie braku połączenia powtarzało procedurę do skutku (poza harmonogramem) :E

Ten post był edytowany przez ziCk_lodz dnia: 23 Październik 2019 - 22:36


#12 Użytkownik jest niedostępny   Bono[UG] 

  • Wiecznie niewyspany...
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 20113
  • Dołączył: Pt, 27 Wrz 02

Napisany 24 Październik 2019 - 08:02

Na podstawie togo co masz ale z zaznaczeniem, ze powershella nie znam, więc będą błędy.
$time = Get-Date -Format G
$list = "google.com", "hotmail.com", "yahoo.com"
$ping = Test-Connection -ComputerName $list -Count 1 -BufferSize 6 -Quiet

    while(($ping -eq $False).Count -gt 0) { //<---------!!!! tutaj do poprawy, zmieniłem if na while i True na False
      {
        Write-Output "$time [ERROR] failed to respond. Attempting to reconnect" | Out-File 'C:\log\log.txt' -Append
        Invoke-WebRequest -UseBasicParsing https://moj_adres_url
        $ping = Test-Connection -ComputerName $list -Count 1 -BufferSize 6 -Quiet //<-------- ponowne wykonanie pinga
      }
Write-output "$time [OK] Connection success" | Out-File 'C:\log\log.txt' -Append

Pomysł polega na zamianie if-a na pelę while i sprawdzeniu przeciwnego warunku, czyli że nie udało się spingować. Wtedy robisz akcję jak do tej pory i na koniec pętli jeszcze raz puszczasz pinga.
Jeżeli ping się uda, to pętla jest przerywana i wykona się kod znajdujący się za nią.

Zapewne udałoby się upchnąć robienie pinga w warunek pętli ale nie wiem czy jest sens tak motać ;)

Ten post był edytowany przez Bono[UG] dnia: 24 Październik 2019 - 08:03


Strona 1 z 1
  • Nie możesz rozpocząć nowego tematu
  • Nie możesz odpowiadać w tym temacie

1 Użytkowników czyta ten temat
0 użytkowników, 1 gości, 0 anonimowych