Firefox Tab oder Webpage automatisch aktualisieren
Hallo Zusammen,
folgende Situation habe ich...wir haben hier eine Webseite, welche regelmäßig aktualisiert werden muss. Bspw. alle 10 Sekunden.
Wir arbeiten hier mit dem Firefox ESR. Addons sind deaktiviert. D.h. das Problem, oder nennen wir es Herausforderung sollte über ein Skript gelöst werden.
Folgendes habe ich schon.
das funktioniert auch eigentlich ganz gut, allerdings wird nur der jeweils aktuelle Tab aktualisiert. Wie kann ich jetzt hier eine spezielle URL mit angeben.
Oder hat jemand von euch eine gänzlich andere Lösung?
folgende Situation habe ich...wir haben hier eine Webseite, welche regelmäßig aktualisiert werden muss. Bspw. alle 10 Sekunden.
Wir arbeiten hier mit dem Firefox ESR. Addons sind deaktiviert. D.h. das Problem, oder nennen wir es Herausforderung sollte über ein Skript gelöst werden.
Folgendes habe ich schon.
while(1) { # Loop forever
sleep -Seconds 5 # Wait 5 seconds
$wshell = New-Object -ComObject wscript.shell
if($wshell.AppActivate('Firefox')) { # Switch to Firefox
Sleep 1 # Wait for Firefox to "activate"
$wshell.SendKeys('{F5}') # Send F5 (Refresh)
} else { break; } # Firefox not open, exit the loop
}
Oder hat jemand von euch eine gänzlich andere Lösung?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 580508
Url: https://administrator.de/contentid/580508
Ausgedruckt am: 24.11.2024 um 07:11 Uhr
11 Kommentare
Neuester Kommentar
Servus,
falls du weder Einfluss auf den Code der Seite hast, noch Plugins nutzen kannst wie du schreibst, lässt sich das auch über UIAutomation lösen.
Dafür habe ich hier eine c# EXE liegen der du per Parameter einen Tab-Titel übergeben kannst und dieser dann im FF aktualisiert wird.
Bei Interesse einfach per PN melden, dann stelle ich gerne die EXE und/oder den c# Quellcode zur Verfügung.
Man kann das ganze natürlich auch mit Powershell machen, guckst du (nur mit dem zur Zeit aktuellen Firefox 77.0.1 64bit [non ESR] getestet). Sollte es mit dem ESR bei dir nicht funktionieren, gib Bescheid, lässt sich ja alles anpassen.
Die URL für den Tab welcher aktualisiert werden soll steht in Zeile 82
Grüße Uwe
falls du weder Einfluss auf den Code der Seite hast, noch Plugins nutzen kannst wie du schreibst, lässt sich das auch über UIAutomation lösen.
Dafür habe ich hier eine c# EXE liegen der du per Parameter einen Tab-Titel übergeben kannst und dieser dann im FF aktualisiert wird.
Bei Interesse einfach per PN melden, dann stelle ich gerne die EXE und/oder den c# Quellcode zur Verfügung.
Man kann das ganze natürlich auch mit Powershell machen, guckst du (nur mit dem zur Zeit aktuellen Firefox 77.0.1 64bit [non ESR] getestet). Sollte es mit dem ESR bei dir nicht funktionieren, gib Bescheid, lässt sich ja alles anpassen.
Die URL für den Tab welcher aktualisiert werden soll steht in Zeile 82
function Get-FireFoxTabs(){
[void][System.Reflection.Assembly]::LoadWithPartialName("UIAutomationClient")
[void][System.Reflection.Assembly]::LoadWithPartialName("UIAutomationTypes")
[void][System.Reflection.Assembly]::LoadWithPartialName("UIAutomationProvider")
[void][System.Reflection.Assembly]::LoadWithPartialName("UIAutomationClientsideProviders")
$cprovider = [System.Reflection.Assembly]::LoadWithPartialName("UIAutomationClientsideProviders")
try{
[Windows.Automation.ClientSettings]::RegisterClientSideProviderAssembly($cprovider.GetName())
}catch{
[Windows.Automation.ClientSettings]::RegisterClientSideProviderAssembly($cprovider.GetName())
}
if (!("win32.tools" -as [type])){
Add-Type –MemberDefinition '
[DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, int lParam);
[DllImport("user32.dll")] public static extern bool SetForegroundWindow (IntPtr hWnd);
[DllImport("user32.dll")] public static extern IntPtr GetForegroundWindow();
' -name "tools" -namespace Win32 | out-null
}
$root = [System.Windows.Automation.AutomationElement]::RootElement
Get-Process -Name firefox | %{
$cond = New-Object System.Windows.Automation.PropertyCondition ([System.Windows.Automation.AutomationElement]::ProcessIdProperty,$_.Id)
$window = $root.FindFirst([System.Windows.Automation.TreeScope]::Children,$cond)
if ($window){
$cond = New-Object System.Windows.Automation.PropertyCondition ([System.Windows.Automation.AutomationElement]::NameProperty,'Browser-Tabs')
$tabsbar = $window.FindFirst([System.Windows.Automation.TreeScope]::Children,$cond)
if ($tabsbar){
# find tabs
$cond = New-Object System.Windows.Automation.PropertyCondition ([System.Windows.Automation.AutomationElement]::ControlTypeProperty,[System.Windows.Automation.ControlType]::TabItem)
$tabs = $tabsbar.FindAll([System.Windows.Automation.TreeScope]::Descendants,$cond)
# find addressbar object
$cond = New-Object System.Windows.Automation.PropertyCondition ([System.Windows.Automation.AutomationElement]::NameProperty,'Navigation')
$urlbar = $window.FindFirst([System.Windows.Automation.TreeScope]::Children,$cond)
if ($urlbar){
$cond = New-Object System.Windows.Automation.PropertyCondition ([System.Windows.Automation.AutomationElement]::ControlTypeProperty,[System.Windows.Automation.ControlType]::Edit)
$urlctl = $urlbar.FindFirst([System.Windows.Automation.TreeScope]::Descendants,$cond)
}
$tabs | %{
# activate tab
$_.GetCurrentPattern([System.Windows.Automation.InvokePatternIdentifiers]::Pattern).Invoke()
# get url of tab
$url = ""
if ($urlctl){
$url = $urlctl.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Pattern).Current.Value
}
$obj = [pscustomobject]@{
Tab = $_
URL = $url
Window = $window
}
$obj | Add-Member -MemberType ScriptMethod -Name Refresh -Value {
write-host "Refreshing tab with URL '$($_.URL)'." -F Green
# activate tab
$_.Tab.GetCurrentPattern([System.Windows.Automation.InvokePatternIdentifiers]::Pattern).Invoke()
# Send F5 via Window-Message
[Win32.tools]::SendMessage($_.Window.Current.NativeWindowHandle,256,0x74,0) | out-null
[Win32.tools]::SendMessage($_.Window.Current.NativeWindowHandle,257,0x74,65539) | out-null
}
$obj | Add-Member -MemberType ScriptMethod -Name Activate -Value {
write-host "Activating tab with URL '$($_.URL)'." -F Green
# activate tab
$_.Tab.GetCurrentPattern([System.Windows.Automation.InvokePatternIdentifiers]::Pattern).Invoke()
}
$obj
}
}
}
}
}
# get all tabs
$tabs = Get-FireFoxTabs
while($true){
# refresh specific tab
$tabs | ?{$_.URL -eq 'https://administrator.de/latest/'} | %{$_.Refresh()}
# sleep x seconds
sleep 5
}
Grüße Uwe
Nach eingehender Analyse verhält sich die ESR-Version im Gegensatz zum aktuellen Feuerfux leider ziemlich problematisch. Zwar ist der Aufbau(Benennung) hier etwas anders, die nötigen Änderungen sind kein Problem, aber der Refresh und das Auslesen der URL-Bar nach dem Aktivieren des jeweiligen Tabs ist momentan noch ein Problem bzw. sehr unzuverlässig, weswegen ich den momentanen Code für den ESR hier noch nicht poste. UI-Automation ist eben vielfach nur eine Krücke bei der man mit diversen Problemen zu kämpfen hat, gerade die Browser bekleckern sich hier oft nicht mit Ruhm. Habe aber im Moment zu wenig Zeit hier die Ursache zu lokalisieren weswegen ich das hier bei mir erst mal mit "very low prio" einstufen muss. Bei Zeiten schau ich vielleicht noch mal danach, aber im Moment passt das leider nicht mehr in meine Zeit-Slots, sorry.
Grüße Uwe
Grüße Uwe
Moin,
Dementsprechend:
Alternativ kann man auch zu den Tabs 1-9 direkt mit Strg+Tabnummer wechseln, also
Gruß Thomas
Zitat von @chkdsk:
das funktioniert auch eigentlich ganz gut, allerdings wird nur der jeweils aktuelle Tab aktualisiert.
Wenn ich das richtig verstehe, willst du also mehrere Tabs aktualisieren? Man kann in Firefox mit Strg+Tab zum nächsten Tab wechseln.das funktioniert auch eigentlich ganz gut, allerdings wird nur der jeweils aktuelle Tab aktualisiert.
Dementsprechend:
$wshell.SendKeys('^{TAB}') # Zum nächsten Tab wechseln
Alternativ kann man auch zu den Tabs 1-9 direkt mit Strg+Tabnummer wechseln, also
$wshell.SendKeys('^{1}') # Zu Tab 1 wechseln
$wshell.SendKeys('^{2}') # Zu Tab 2 wechseln
...
Gruß Thomas