AppleScript에서 스크롤 막대 위치를 변경하는 방법?


1

타사 응용 프로그램 인 FastScripts를 통해 키보드 바로 가기에 할당 된 AppleScript .scpt 파일이 있습니다.

이 스크립트는 새로운 Chrome 탭에서 특정의 고정 된 사전 결정된 URL을 엽니 다. 이 새 탭은 현재 열려있는 Google 크롬 탭 바로 다음에 삽입 (Google 크롬이 현재 열려있는 경우).

다음은이 코드입니다.

activate application "Google Chrome"

set myURL to "https://weather.com/weather/hourbyhour/l/12345"

tell application "Google Chrome"
    activate
    tell front window to make new tab at after (get active tab) with properties {URL:myURL}
end tell

이 스크립트에서 구현하고자하는 추가 작업은 Chrome에서 열린 웹 페이지의 스크롤 막대를 자동으로 아래쪽으로 약간 이동하는 것입니다. URL 변수와 마찬가지로 스크롤 양은 구체적이고 고정적이며 사전 결정됩니다.


저는 서면으로 스크롤 량을 표현할 수있는 적절한 방법을 모르겠습니다. (물론 화면 해상도, 모니터 크기, 창 크기 및 해당 페이지에 대한 Chrome의 확대 / 축소 설정에 따라 다릅니다. 내 독특한 환경 때문에 페이지 아래로 약 15 % 정도라고 말할 수 있습니다. 이 설명의 의미를 명확히하기 위해 "페이지 아래로 100 %"는 가장 낮은 스크롤 바 위치에 있습니다 (스크롤바는이 위치로 설정할 수 있습니다). ⌘ 명령 + ).

내가 원하는 정확한 스크롤 량은 내 질문의 맥락에서 특히 관련이 없다 (스크롤 량에 영향을 줄 수있는 많은 변수를 고려한). 페이지의 맨 위 또는 맨 아래에있는 것과는 대조적으로 스크롤 양은 사용자 정의 숫자라는 점에 유의해야합니다 (하나의 키보드 단축키를 key code AppleScript로이 두 위치로 쉽게 스크롤 할 수 있습니다.)

원하는 솔루션이 무엇이든지간에 원하는 스크롤바 위치를 미세 조정하고 조정할 수있는 기능을 제공하여 최대한 수동으로 스크롤 할 수있는 위치에 가깝게 할 수 있기를 바랍니다.


그것은 실제 URL입니까? 그렇다면 해당 페이지에서 예를 들어 어디로 설정하려고하십니까? 검색 주소창 바로 아래에 있습니까? 창의 경계가 항상 같습니까? 아니면 경계를 설정하여 상수가되도록 하시겠습니까? "페이지"라는 용어를 사용하는 경우, html 문서의 전체 길이를 단일 페이지 또는 인쇄 된 페이지 수 또는 창 경계 내에 현재 표시된 페이지 영역 내에서 볼 수있는 전체 길이로 나타냅니다. 이 특정 페이지에 대해서 당신이하려는 일입니까?
user3439894

@ user3439894 페이지 상단이 현재 시간 (현재 "9:48 pm EST")과 "시간 설명 TEMP FEELS PRECIP HUMIDITY WIND"열 머리글 사이에 오도록하고 싶습니다. 하지만 Adblock을 사용합니다. 페이지 상단의 큰 광고를 스크롤하지 않아도됩니다. Google 크롬 창의 경계는 항상 동일합니다 (메뉴 막대에서 Dock까지 전체 너비와 전체 높이). "페이지"를 참조 할 때 브라우저 창에 하나의 연속 페이지로 존재하는 전체 페이지를 의미합니다. 인쇄보기가 아니거나 보이는 것만 나타냅니다.
rubik's sphere

예, 지금 당장은이 특정 웹 페이지에만 구현하려고합니다. 아래로, 나는 다른 웹 주소에 대한 솔루션을 적용합니다.
rubik's sphere

화면의 해상도와 Chrome 창 경계를 제공 할 수 있습니까? 원하는 코드를 얻을 수 있도록 코드를 테스트 해달라고 부탁합니다. 당신이 사용할 수있는, tell application "Finder" to get bounds of window of desktoptell application "Google Chrome" to get bounds of front window 대상 URL이 앞 창인 경우
user3439894

@ user3439894 화면 크기: 15.4 인치 망막. 해결: "표시 기본값" "(2880 x 1800)" . Chrome 창의 경계 (내 Chrome 창 경계는 항상이 크기입니다). "{0, 23, 1440, 850}" . Chrome 확대 / 축소 설정 (해당 웹 페이지의 경우) : 100 %. Chrome 디스플레이 옵션 : 나는 "북마크 바" 또는 창의 상단에 표시된 확장 관련 도구 모음 주소 표시 줄과 탭만
rubik's sphere

답변:


2

당신은 자바 스크립트 스크롤 양을 설정하십시오.

정의 된 비율로 스크롤을 조정하려면 :

set myURL to "https://weather.com/weather/hourbyhour/l/12345"
set scrollAmount to "16" --- % down the page

tell application "Google Chrome"
    activate
    tell front window to set curTab to make new tab at after (get active tab) with properties {URL:myURL}
    tell curTab
        repeat while (loading)
            delay 1
        end repeat
        -- set the vertical scroll 
        execute javascript "h=document.documentElement.scrollHeight-document.documentElement.clientHeight; window.scrollTo(0,h*" & scrollAmount & "/100)"
    end tell
end tell

페이지의 요소 맨 위에서 세로 스크롤을 조정하려면 스크립트에서 다음을 사용하여 요소를 가져올 수 있습니다. document.getElementById('twc-scrollabe') twc-scrollable 테이블의 식별자입니다.

그 후, 자바 스크립트 루프를 사용하여 페이지의 표 상단을 가져옵니다.

set myURL to "https://weather.com/weather/hourbyhour/l/12345"
tell application "Google Chrome"
    activate
    tell front window to set curTab to make new tab at after (get active tab) with properties {URL:myURL}
    tell curTab
        repeat while (loading)
            delay 1
        end repeat
        -- scroll to the top of the table
        execute javascript "e=document.getElementById('twc-scrollabe');tTop=0; do {tTop +=e.offsetTop || 0; e=e.offsetParent} while(e); window.scrollTo(0,tTop);"
    end tell
end tell

이 문제 자바 스크립트 (다른 URL에서) 페이지의 소스에서 식별자를 찾아서 스크립트에서 변경해야합니다. 요소에 식별자가 없으면 다른 메소드를 사용하여 요소를 가져와야합니다. JavasScript 코드는 사이트의 페이지에.


아주 좋아! 나는 당신의 대답에서 새로운 것을 계속 배웁니다. +1
user3439894

백분율 기반 솔루션과 테이블 기반 솔루션 모두 완벽하게 작동하며 키 스트로크 - 아래쪽 화살표 방법보다 시간이 적습니다. 두 번째 해결 방법은 놀랍습니다. 스크롤바를 원하는 위치에 정확하게 설정하기 때문입니다. 감사합니다 jackjr300!
rubik's sphere

2

의견에서 제공 한 추가 정보를 바탕으로 다음 예제를 제공하겠습니다. 암호 내가 어떻게 할 수 있는지. (적어도 더 좋은 방법을 알게 될 때까지.)

set myURL to "https://weather.com/weather/hourbyhour/l/12345"

tell application "Google Chrome"
    set bounds of front window to {0, 23, 1440, 850}
    tell front window to make new tab at after (get active tab) with properties {URL:myURL}
    repeat while (loading of active tab of front window is true)
        delay 1
    end repeat
    activate
    tell application "System Events"
        repeat 9 times
            key code 125 -- # Down Arrow
            delay 0.1
        end repeat
    end tell
end tell

노트:

  • 그만큼 ~의 delay 명령 ~ 안에 repeat while ... 고리 페이지가 실제로 얼마나 빨리로드되는지에 따라 적절하게 조정될 수 있습니다. 행사 트리거가 불필요하게 트리거되지 않도록 행사 . 페이지로드가 완료되어야합니다. 그렇지 않으면 다음 페이지가로드됩니다. repeat 고리 ~하지 않을 것이다 스크롤 적절한 금액. (나는 분명히 용어를 사용하고있다. 스크롤 비 유적으로.)

  • 에서 tell application "System Events" 문 / 블록 , 시간을 조정해야 할 수도 있습니다 repeat 고리 트리거. 그만큼 delay 명령 이걸로 repeat 고리 그렇지 않으면 필요하다. key code 행사 이 경우 페이지에 제대로 등록되지 않습니다.


와우, 재밌 네요. 귀하의 솔루션은 내 원래의 시도와 거의 동일합니다. 나는 그것으로 일할 수 없었다. delay 1그래서 나는 내 방법이 나쁘다고 잘못 추측했다. 내가 너를 바꿀 때. delay 1delay 3, 코드는 이제 내 컴퓨터에서 제대로 작동합니다. 귀하의 솔루션은 내가 원하는 것을 성취하지만, AppleScript가보다 우아한 스크롤 방법을 제공하지 않는다는 사실에 매우 놀랐습니다.
rubik's sphere
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.