จะป้องกันไม่ให้ Google Colab ตัดการเชื่อมต่อได้อย่างไร


137

ถาม:มีวิธีใดบ้างที่จะป้องกันไม่ให้Google Colabตัดการเชื่อมต่อเมื่อหมดเวลาทางโปรแกรม

ต่อไปนี้จะอธิบายถึงเงื่อนไขที่ทำให้โน้ตบุ๊กตัดการเชื่อมต่อโดยอัตโนมัติ:

โน้ตบุ๊ก Google Colab มีช่วงเวลาว่าง 90 นาทีและหมดเวลาแน่นอน 12 ชั่วโมง ซึ่งหมายความว่าหากผู้ใช้ไม่โต้ตอบกับโน้ตบุ๊ก Google Colab เป็นเวลานานกว่า 90 นาทีอินสแตนซ์จะถูกยกเลิกโดยอัตโนมัติ นอกจากนี้อายุการใช้งานสูงสุดของอินสแตนซ์ Colab คือ 12 ชั่วโมง

โดยปกติแล้วเราต้องการบีบอินสแตนซ์สูงสุดออกโดยอัตโนมัติโดยไม่ต้องโต้ตอบกับอินสแตนซ์ด้วยตนเองตลอดเวลาโดยไม่ต้องด้วยตนเองโต้ตอบกับมันอย่างต่อเนื่องที่นี่ฉันจะถือว่าข้อกำหนดของระบบที่พบเห็นได้ทั่วไป:

  • ระบบปฏิบัติการ Ubuntu 18 LTS / Windows 10 / Mac
  • ในกรณีของระบบที่ใช้ Linux ให้ใช้ DE ยอดนิยมเช่น Gnome 3 หรือ Unity
  • เบราว์เซอร์ Firefox หรือ Chromium

ฉันควรชี้ให้เห็นที่นี่ว่าพฤติกรรมดังกล่าวไม่ได้ละเมิด ข้อกำหนดการใช้งานของ Google Colabแม้ว่าจะไม่ได้รับการสนับสนุนตามคำถามที่พบบ่อยก็ตาม (กล่าวโดยย่อ: ตามหลักศีลธรรมแล้วการใช้ GPU ทั้งหมดไม่เป็นไรหากคุณไม่ต้องการจริงๆ ).


วิธีแก้ปัญหาปัจจุบันของฉันโง่มาก:

  • ก่อนอื่นฉันปิดโปรแกรมรักษาหน้าจอเพื่อให้หน้าจอของฉันเปิดอยู่เสมอ
  • ฉันมีบอร์ด Arduino ดังนั้นฉันจึงเปลี่ยนมันเป็นusb ducky ยางและทำให้มันเลียนแบบการโต้ตอบของผู้ใช้แบบดั้งเดิมในขณะที่ฉันนอนหลับ (เพียงเพราะฉันมีมันอยู่ในมือสำหรับกรณีการใช้งานอื่น ๆ )

มีวิธีที่ดีกว่านี้ไหม


1
ฉันก็สงสัยเกี่ยวกับคำถามเดียวกันนี้เหมือนกัน จะเป็นประโยชน์สำหรับนักศึกษาในช่วงเวลาของการป้องกันวิทยานิพนธ์
Dmitrii

2
"หมดเวลาใช้งาน 90 นาที ... หากผู้ใช้ไม่โต้ตอบกับโน้ตบุ๊ก Google Colab นานกว่า 90 นาทีอินสแตนซ์จะถูกยกเลิกโดยอัตโนมัติ" แย่มากเพราะไม่สามารถใช้ kerastuner ได้ เจ้าหน้าที่ของ Google จำเป็นต้องคิดให้หนักขึ้นหากต้องการให้ประชาชนใช้ kerastuner จริงๆ
Geoffrey Anderson

1
ฉันจะหยุดการทำงานของสคริปต์นี้ได้อย่างไร
Murtaza Kamal

1
ไม่ใช่รหัส แต่มีน้ำหนักเพียงเล็กน้อยและปุ่ม Backspace ในระบบของคุณสามารถทำเคล็ดลับให้คุณได้ หวังว่าคุณจะเข้าใจ!
Vikalp Jain

คำตอบ:


120

แก้ไข: เห็นได้ชัดว่าการแก้ปัญหานั้นง่ายมากและไม่จำเป็นต้องใช้ JavaScript ใด ๆ เพียงสร้างเซลล์ใหม่ที่ด้านล่างโดยมีบรรทัดต่อไปนี้:

while True:pass

ตอนนี้ให้เซลล์อยู่ในลำดับการทำงานเพื่อไม่ให้ลูปไม่มีที่สิ้นสุดและทำให้เซสชันของคุณมีชีวิตอยู่

วิธีการเดิม: กำหนดช่วงเวลาจาวาสคริปต์เพื่อคลิกที่ปุ่มเชื่อมต่อทุกๆ 60 วินาที เปิดการตั้งค่าสำหรับนักพัฒนา (ในเว็บเบราว์เซอร์ของคุณ) ด้วย Ctrl + Shift + I จากนั้นคลิกที่แท็บคอนโซลและพิมพ์สิ่งนี้ในพรอมต์คอนโซล (สำหรับ Mac กด Option + Command + I)

function ConnectButton(){
    console.log("Connect pushed"); 
    document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click() 
}
setInterval(ConnectButton,60000);

1
มันขึ้นว่าUncaught TypeError: ไม่สามารถอ่านคุณสมบัติ 'คลิก' ของ null ที่ ConnectButton
Shaida Muhammad

1
ดูเหมือนว่าคำตอบของคุณจะล้าสมัย
jgauth

1
แก้ไขโดยการอัปเดตตัวเลือก JS
Tanay Karve

4
ใน Chrome คุณสามารถสร้างบุ๊กมาร์กเพื่อเปิดใช้งานข้อมูลโค้ดนี้ได้ในคลิกเดียว เพียงสร้างบุ๊กมาร์กด้วย URL ต่อไปนี้: javascript:void(setInterval(function(){ console.log("Connect pushed"); document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click(); },60000))(เวอร์ชันซับเดียวของคำสั่งเดียวกัน) ฉันไม่แน่ใจว่ามันใช้ได้กับเบราว์เซอร์อื่นหรือไม่
pdpino

1
@qAp ฉันพบว่ามันจะยังคงใช้งานได้แม้ว่าคุณจะอยู่บนแท็บอื่นหรือหน้าจอของคุณ
ดับ

50

เนื่องจากตอนนี้รหัสของปุ่มเชื่อมต่อเปลี่ยนเป็น "colab-connect-button" แล้วคุณสามารถใช้รหัสต่อไปนี้เพื่อคลิกปุ่มต่อไป

function ClickConnect(){
    console.log("Clicked on connect button"); 
    document.querySelector("colab-connect-button").click()
}
setInterval(ClickConnect,60000)

หากยังคงไม่ได้ผลให้ทำตามขั้นตอนด้านล่าง:

  1. คลิกขวาที่ปุ่มเชื่อมต่อ (ที่ด้านขวาบนของ colab)
  2. คลิกที่ตรวจสอบ
  3. รับรหัส HTML ของปุ่มและแทนที่ด้วยรหัสต่อไปนี้
function ClickConnect(){
    console.log("Clicked on connect button"); 
    document.querySelector("Put ID here").click() // Change id here
}
setInterval(ClickConnect,60000)

5
นี่คือโซลูชันปัจจุบันตามรหัสปุ่มใหม่ (ก.พ. 2563)
Kaushal28

หาก Google จะพยายามทำให้สิ่งนี้ใช้ไม่ได้ (ตัวอย่าง: ทำให้เป็นคลาสและมีปุ่มล่องหนปลอมหลายปุ่มในคลาสเดียวกันนั้น) คุณสามารถใช้แทนขั้นตอนที่ 3 ได้เสมอ: คลิกขวา -> Copy -> Copy JS Path
Banjer_HD

ยังคงได้รับปัญหาเดิม Runtime ถูกตัดการเชื่อมต่อรันไทม์ถูกตัดการเชื่อมต่อเนื่องจากไม่มีการใช้งาน
SUSHMA KUMARI

5
ฉันจะหยุดการทำงานของสคริปต์นี้ได้อย่างไร
Murtaza Kamal

2
@MurtazaKamal Crtl + Shift + I ไปที่ Sources แล้วคลิกที่ปุ่มหยุดชั่วคราว
Faisal Maqbool

19

นี่ใช้ได้ผลสำหรับฉัน -

เรียกใช้รหัสต่อไปนี้ในคอนโซลและจะป้องกันไม่ให้คุณตัดการเชื่อมต่อ Ctrl + Shift + i เพื่อเปิดมุมมองตัวตรวจสอบ จากนั้นไปที่คอนโซล

function ClickConnect(){
    console.log("Working"); 
    document.querySelector("colab-toolbar-button#connect").click() 
}
setInterval(ClickConnect,60000)

วิธีป้องกันไม่ให้ google colab ตัดการเชื่อมต่อ


1
ขอบคุณสิ่งนี้ใช้ได้ดีสำหรับฉันเช่นกัน (ฉันแสดงความคิดเห็นเดิมไว้ที่นี่เมื่อสัปดาห์ที่แล้ว แต่มันหายไปสิ่งสำคัญคือต้องไม่เสียงานดังนั้นคำตอบนี้จึงสมควรได้รับการตอบรับเชิงบวก)
Geoffrey Anderson

ไม่ทำงานยังคงถูกตัดการเชื่อมต่อ (โดยใช้เบราว์เซอร์ Firefox 74.0 (64 บิต))
hafiz031

ยังใช้งานได้แม้ว่าคุณจะออกจากหน้าต่างเบราว์เซอร์ให้เล็กที่สุดและทำงานกับแอปพลิเคชันอื่น ๆ ได้หรือไม่
HarryS

18

สำหรับฉันตัวอย่างต่อไปนี้:

  • document.querySelector("#connect").click() หรือ
  • document.querySelector("colab-toolbar-button#connect").click() หรือ
  • document.querySelector("colab-connect-button").click()

กำลังส่งข้อผิดพลาด

ฉันต้องปรับให้เข้ากับสิ่งต่อไปนี้:

เวอร์ชัน 1:

function ClickConnect(){
  console.log("Connnect Clicked - Start"); 
  document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
  console.log("Connnect Clicked - End"); 
};
setInterval(ClickConnect, 60000)

เวอร์ชัน 2: หากคุณต้องการหยุดฟังก์ชันนี้รหัสใหม่มีดังนี้

var startClickConnect = function startClickConnect(){
    var clickConnect = function clickConnect(){
        console.log("Connnect Clicked - Start");
        document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
        console.log("Connnect Clicked - End"); 
    };

    var intervalId = setInterval(clickConnect, 60000);

    var stopClickConnectHandler = function stopClickConnect() {
        console.log("Connnect Clicked Stopped - Start");
        clearInterval(intervalId);
        console.log("Connnect Clicked Stopped - End");
    };

    return stopClickConnectHandler;
};

var stopClickConnect = startClickConnect();

หากต้องการหยุดโทร:

stopClickConnect();

สำหรับฉันนี่เป็นทางออกเดียวที่ไม่ทำให้เกิดข้อผิดพลาด ขอบคุณ
pair ใน

ฉันได้ลองใช้วิธีการข้างต้นและบล็อกอื่น ๆ อีกสองสามบล็อก โดยที่ผ่านมาและเกี่ยวข้องกับยุคปัจจุบันรหัสทั้งสองของคุณทำงานได้โดยปราศจากข้อผิดพลาด ขอบคุณ :)
HarryS

15

สร้างรหัสหลามในพีซีของคุณด้วย pynput

from pynput.mouse import Button, Controller
import time

mouse = Controller()

while True:
    mouse.click(Button.left, 1)
    time.sleep(30)

เรียกใช้รหัสนี้ในเดสก์ท็อปของคุณจากนั้นชี้ลูกศรชี้ไปที่โครงสร้างไดเร็กทอรี (colabs ด้านซ้าย - ส่วนไฟล์) บนไดเร็กทอรีใด ๆ รหัสนี้จะคลิกที่ไดเร็กทอรีทุก ๆ 30 วินาทีดังนั้นมันจะขยายและย่อทุกๆ 30 วินาทีดังนั้นเซสชันของคุณจะไม่ หมดอายุสิ่งสำคัญ - คุณต้องเรียกใช้รหัสนี้ในพีซีของคุณ


ฉันลองสิ่งนี้และได้รับ DisplayNameError เมื่อฉันนำเข้า pynput บางทีอาจเป็นเพราะเราสามารถเข้าถึง colab ผ่านเบราว์เซอร์เท่านั้น (ในเซสชันรันไทม์ที่โฮสต์) ไม่ใช่คีย์บอร์ด / เมาส์เป็นต้น
HasnainMamdani

ฉันคิดว่าคุณเข้าใจผิดไปแล้ว ไม่สามารถเข้าถึง Colab ด้วย python เฉพาะเมาส์ของคุณที่ควบคุมโดยรหัสด้านบน (เนื่องจากเพื่อจำลองการโต้ตอบของเมาส์กับเบราว์เซอร์) แก้ไขปัญหาไลบรารีในพีซีท้องถิ่น
Seyon Seyon

13

แทนที่จะคลิกปุ่มเชื่อมต่อฉันแค่คลิกที่ปุ่มแสดงความคิดเห็นเพื่อให้เซสชันของฉันคงอยู่ต่อไป (สิงหาคม -2020)

function ClickConnect(){

console.log("Working"); 
document.querySelector("#comments > span").click() 
}
setInterval(ClickConnect,5000)

11

ฉันใช้โปรแกรมมาโครเพื่อคลิกปุ่ม RAM / ดิสก์เป็นระยะเพื่อฝึกโมเดลตลอดทั้งคืน เคล็ดลับคือการกำหนดค่าโปรแกรมมาโครให้คลิกที่ปุ่ม Ram / Disk Colab Toolbar สองครั้งโดยมีช่วงเวลาสั้น ๆ ระหว่างการคลิกสองครั้งเพื่อที่แม้ว่า Runtime จะถูกตัดการเชื่อมต่อ แต่ก็จะเชื่อมต่อกลับอีกครั้ง (คลิกแรกที่ใช้เพื่อปิดกล่องโต้ตอบและคลิกที่สองที่ใช้เพื่อ RECONNECT) อย่างไรก็ตามคุณยังคงต้องเปิดแล็ปท็อปทิ้งไว้ทั้งคืนและอาจตรึงแท็บ Colab ไว้


8

คำตอบข้างต้นด้วยความช่วยเหลือของสคริปต์บางอย่างอาจทำงานได้ดี ฉันมีวิธีแก้ไข (หรือเคล็ดลับประเภทหนึ่ง) สำหรับการตัดการเชื่อมต่อที่น่ารำคาญโดยไม่มีสคริปต์โดยเฉพาะอย่างยิ่งเมื่อโปรแกรมของคุณต้องอ่านข้อมูลจาก Google ไดรฟ์ของคุณเช่นการฝึกอบรมโมเดลเครือข่ายการเรียนรู้เชิงลึกซึ่งการใช้สคริปต์เพื่อreconnectดำเนินการนั้นไม่มีประโยชน์เพราะครั้งเดียว คุณตัดการเชื่อมต่อกับ colab ของคุณโปรแกรมก็หมดแล้วคุณควรเชื่อมต่อกับไดรฟ์ Google ของคุณด้วยตนเองอีกครั้งเพื่อให้โมเดลของคุณสามารถอ่านชุดข้อมูลได้อีกครั้ง แต่สคริปต์จะไม่ทำสิ่งนั้น
ฉันได้ทดสอบหลายครั้งแล้วและได้ผลดี
เมื่อคุณเรียกใช้โปรแกรมบนหน้า colab ด้วยเบราว์เซอร์ (ฉันใช้ Chrome) โปรดจำไว้ว่าอย่าดำเนินการใด ๆ กับเบราว์เซอร์ของคุณเมื่อโปรแกรมของคุณเริ่มทำงานเช่นเปลี่ยนไปใช้หน้าเว็บอื่นเปิดหรือปิดหน้าเว็บอื่นและ ดังนั้นเพียงแค่ปล่อยให้มันอยู่คนเดียวและรอให้โปรแกรมของคุณทำงานเสร็จคุณสามารถเปลี่ยนไปใช้ซอฟต์แวร์อื่นเช่น pycharm เพื่อเขียนโค้ดของคุณต่อไป แต่อย่าเปลี่ยนไปใช้หน้าเว็บอื่น ฉันไม่รู้ว่าทำไมการเปิดหรือปิดหรือเปลี่ยนไปยังหน้าอื่น ๆ จะทำให้เกิดปัญหาการเชื่อมต่อของหน้า google colab แต่ทุกครั้งที่ฉันพยายามรบกวนเบราว์เซอร์ของฉันเช่นทำงานค้นหาบางอย่างการเชื่อมต่อกับ colab ของฉันจะพังลงในไม่ช้า


ฉันจะเพิ่มคำตอบของคุณว่า Firefox ทำงานได้ดีกับเคล็ดลับนี้ แต่สำหรับฉันฉันปิดโหมดสลีปบนเครื่อง Mac ของฉันและวางหน้าต่างเบราว์เซอร์ไว้หน้าหน้าต่างอื่น ๆ ทั้งหมดราวกับว่าฉันกำลังทำงานอยู่ ฉันเก็บมันไว้ทั้งคืนและได้ผล เทคนิคจาวาสคริปต์ไม่ได้ผล หมายเหตุอย่างหนึ่งคือฉันใช้ Google Colab Pro: ดังนั้นฉันไม่แน่ใจว่าจะใช้ได้กับ colab ฟรีหรือไม่
Yasser Sinjab

@Yasser Sinjab ขอบคุณสำหรับการเพิ่มของคุณฉันใช้เวอร์ชันฟรีและใช้งานได้ดี
Hu Xixi

8

ลองสิ่งนี้:

function ClickConnect(){
  console.log("Working"); 
  document
    .querySelector("#top-toolbar > colab-connect-button")
    .shadowRoot
    .querySelector("#connect")
    .click()
}

setInterval(ClickConnect,60000)

6

ใช้ไพ ธ อนซีลีเนียม

from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time   

driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver')

notebook_url = ''
driver.get(notebook_url)

# run all cells
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + Keys.F9)
time.sleep(5)

# click to stay connected
start_time = time.time()
current_time = time.time()
max_time = 11*59*60 #12hours

while (current_time - start_time) < max_time:
    webdriver.ActionChains(driver).send_keys(Keys.ESCAPE).perform()
    driver.find_element_by_xpath('//*[@id="top-toolbar"]/colab-connect-button').click()
    time.sleep(30)
    current_time = time.time()

6

ฉันไม่เชื่อว่าโซลูชัน JavaScript ใช้งานได้อีกต่อไป ฉันทำมันจากในสมุดบันทึกของฉันด้วย:

    from IPython.display import display, HTML
    js = ('<script>function ConnectButton(){ '
           'console.log("Connect pushed"); '
           'document.querySelector("#connect").click()} '
           'setInterval(ConnectButton,3000);</script>')
    display(HTML(js))

เมื่อคุณทำการ Run all เป็นครั้งแรก (ก่อนที่โค้ด JavaScript หรือ Python จะเริ่มทำงาน) คอนโซลจะแสดง:

Connected to 
wss://colab.research.google.com/api/kernels/0e1ce105-0127-4758-90e48cf801ce01a3/channels?session_id=5d8...

อย่างไรก็ตามทุกครั้งที่ JavaScript ทำงานคุณจะเห็นส่วน console.log แต่ส่วนการคลิกจะให้:

Connect pushed

Uncaught TypeError: Cannot read property 'click' of null
 at ConnectButton (<anonymous>:1:92)

คนอื่นแนะนำว่าชื่อปุ่มได้เปลี่ยนเป็น # colab-connect-button แต่ก็มีข้อผิดพลาดเหมือนกัน

หลังจากรันไทม์เริ่มทำงานปุ่มจะเปลี่ยนเพื่อแสดง RAM / DISK และจะมีดรอปดาวน์ปรากฏขึ้น การคลิกที่เมนูแบบเลื่อนลงจะเป็นการสร้างรายการใหม่<DIV class=goog menu...>ที่ไม่ได้แสดงใน DOM ก่อนหน้านี้โดยมี 2 ตัวเลือก "Connect to host runtime" และ "Connect to local runtime" หากหน้าต่างคอนโซลเปิดอยู่และแสดงองค์ประกอบคุณจะเห็น DIV นี้ปรากฏขึ้นเมื่อคุณคลิกองค์ประกอบแบบเลื่อนลง เพียงแค่เลื่อนโฟกัสของเมาส์ไปมาระหว่างสองตัวเลือกในหน้าต่างใหม่ที่ปรากฏขึ้นจะเพิ่มองค์ประกอบเพิ่มเติมให้กับ DOM ทันทีที่เมาส์หลุดโฟกัสพวกมันจะถูกลบออกจาก DOM โดยสิ้นเชิงแม้จะไม่คลิกก็ตาม


เห็นด้วยมีวิธีแก้ปัญหาใดบ้าง
Talha Anwar

5

ฉันลองใช้รหัสด้านบน แต่ไม่ได้ผลสำหรับฉัน นี่คือรหัส JS ของฉันสำหรับการเชื่อมต่อใหม่

let interval = setInterval(function(){
let ok = document.getElementById('ok');
if(ok != null){
   console.log("Connect pushed");
ok.click();
}},60000)

คุณสามารถใช้ด้วยวิธีเดียวกัน (เรียกใช้บนคอนโซลของเบราว์เซอร์ของคุณ) เพื่อเรียกใช้ หากคุณต้องการหยุดสคริปต์คุณสามารถป้อนclearInterval(interval)และต้องการเรียกใช้อีกครั้งsetInterval(interval)และต้องการที่จะทำงานอีกครั้ง

ฉันหวังว่านี่จะช่วยคุณได้


5

อัปเดตหนึ่งรายการ มันได้ผลสำหรับฉัน

function ClickConnect(){
console.log("Working"); 
document.querySelector("paper-icon-button").click()
}
Const myjob = setInterval(ClickConnect, 60000)

หากไม่ได้ผลสำหรับพวกคุณลองล้างโดยเรียกใช้:

clearInterval(myjob)


4

อันนี้ใช้ได้สำหรับฉัน (ดูเหมือนว่าพวกเขาเปลี่ยนชื่อคลาสของปุ่มหรือ id):

function ClickConnect(){
    console.log("Working"); 
    document.querySelector("colab-connect-button").click() 
}
setInterval(ClickConnect,60000)


4

คำตอบที่ได้รับการโหวตมากที่สุดเหมาะกับฉันอย่างแน่นอน แต่มันทำให้หน้าต่างจัดการเซสชันปรากฏขึ้นครั้งแล้วครั้งเล่า
ฉันได้แก้ไขโดยการคลิกปุ่มรีเฟรชอัตโนมัติโดยใช้คอนโซลเบราว์เซอร์เช่นด้านล่าง

function ClickRefresh(){
    console.log("Clicked on refresh button"); 
    document.querySelector("paper-icon-button").click()
}
setInterval(ClickRefresh, 60000)

อย่าลังเลที่จะให้ข้อมูลเพิ่มเติมสำหรับสิ่งนี้ที่ส่วนสำคัญนี้https://gist.github.com/Subangkar/fd1ef276fd40dc374a7c80acc247613e


4

บางทีวิธีแก้ปัญหาก่อนหน้านี้หลายวิธีใช้งานไม่ได้แล้ว ตัวอย่างเช่นรหัสร้องนี้ยังคงสร้างเซลล์โค้ดใหม่ใน Colab ซึ่งทำงานได้ ไม่ต้องสงสัยเลยว่าการสร้างเซลล์โค้ดจำนวนมากเป็นเรื่องที่ไม่สะดวก หากมีการสร้างเซลล์โค้ดมากเกินไปในบางชั่วโมงของการทำงานและไม่มี RAM เพียงพอเบราว์เซอร์อาจหยุดทำงาน

สิ่งนี้สร้างเซลล์โค้ดซ้ำ ๆ -

function ClickConnect(){
console.log("Working"); 
document.querySelector("colab-toolbar-button").click() 
}setInterval(ClickConnect,60000)

แต่ฉันพบว่าโค้ดด้านล่างใช้งานได้ไม่ก่อให้เกิดปัญหาใด ๆ ในแท็บสมุดบันทึก Colab ให้คลิกที่Ctrl + Shift + iปุ่มพร้อมกันและวางรหัสด้านล่างในคอนโซล ช่วงเวลา 120000 ก็เพียงพอแล้ว

function ClickConnect(){
console.log("Working"); 
document.querySelector("colab-toolbar-button#connect").click() 
}setInterval(ClickConnect,120000)

ฉันได้ทดสอบโค้ดนี้ใน firefox แล้วในเดือนพฤศจิกายน 2020 มันจะใช้ได้กับ chrome ด้วย


3

ฉันอยากจะแนะนำให้ใช้ JQuery (ดูเหมือนว่า Co-lab จะมี JQuery เป็นค่าเริ่มต้น)

function ClickConnect(){
  console.log("Working");
  $("colab-toolbar-button").click();
}
setInterval(ClickConnect,60000);

อันนี้ใช้ไม่ได้:Uncaught ReferenceError: $ is not defined at ClickConnect (<anonymous>:3:3)
Kel Solaar

3

ฉันมีปัญหากับฟังก์ชันจาวาสคริปต์เหล่านี้:

function ClickConnect(){
    console.log("Clicked on connect button"); 
    document.querySelector("colab-connect-button").click()
}
setInterval(ClickConnect,60000)

พวกเขาพิมพ์ "ปุ่มคลิกที่เชื่อมต่อ" บนคอนโซลก่อนที่ปุ่มจะถูกคลิกจริงๆ ดังที่คุณเห็นจากคำตอบต่างๆในชุดข้อความนี้รหัสของปุ่มเชื่อมต่อมีการเปลี่ยนแปลงสองสามครั้งนับตั้งแต่เปิดตัว Google Colab และอาจเปลี่ยนแปลงได้ในอนาคตเช่นกัน ดังนั้นหากคุณจะคัดลอกคำตอบเก่าจากชุดข้อความนี้อาจมีข้อความว่า "Clicked on connect button" แต่จริงๆแล้วอาจไม่เป็นเช่นนั้น แน่นอนว่าถ้าคลิกไม่ได้มันจะพิมพ์ข้อผิดพลาดบนคอนโซล แต่จะเกิดอะไรขึ้นถ้าคุณไม่เห็นโดยบังเอิญ? ดังนั้นคุณควรทำสิ่งนี้:

function ClickConnect(){
    document.querySelector("colab-connect-button").click()
    console.log("Clicked on connect button"); 
}
setInterval(ClickConnect,60000)

และคุณจะเห็นได้อย่างแน่นอนว่ามันใช้งานได้จริงหรือไม่


3
function ClickConnect()
{
    console.log("Working...."); 
    document.querySelector("paper-button#comments").click()
}
setInterval(ClickConnect,600)

สิ่งนี้ใช้ได้ผลสำหรับฉัน แต่ใช้อย่างชาญฉลาด

มีความสุขในการเรียนรู้ :)


3

วิธีแก้ปัญหาล่าสุดต่อไปนี้ใช้ได้กับฉัน:

function ClickConnect(){
  colab.config
  console.log("Connnect Clicked - Start"); 
  document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
  console.log("Connnect Clicked - End");
};
setInterval(ClickConnect, 60000)

พิจารณารวมคำอธิบายสำหรับคำตอบของคุณ
Suraj Subramanian

3

จาวาสคริปต์ด้านล่างใช้ได้กับฉัน เครดิต@ artur.k.space

function ColabReconnect() {
    var dialog = document.querySelector("colab-dialog.yes-no-dialog");
    var dialogTitle = dialog && dialog.querySelector("div.content-area>h2");
    if (dialogTitle && dialogTitle.innerText == "Runtime disconnected") {
        dialog.querySelector("paper-button#ok").click();
        console.log("Reconnecting...");
    } else {
        console.log("ColabReconnect is in service.");
    }
}
timerId = setInterval(ColabReconnect, 60000);

ในสมุดบันทึก Colab คลิกที่ Ctrl + Shift + iคีย์พร้อมกัน คัดลอกและวางสคริปต์ลงในบรรทัดพร้อมต์ จากนั้นตีEnterก่อนปิดตัวแก้ไข

เมื่อทำเช่นนั้นฟังก์ชันจะตรวจสอบทุก ๆ 60 วินาทีเพื่อดูว่ากล่องโต้ตอบการเชื่อมต่อบนหน้าจอแสดงขึ้นหรือไม่และหากเป็นเช่นนั้นฟังก์ชันจะคลิกokปุ่มให้คุณโดยอัตโนมัติ


3

ฉันไม่ใช่งูหลามและฉันไม่รู้ว่าการใช้งาน 'Colab' นี้คืออะไรฉันใช้มันเป็นระบบสร้างฮ่า ๆ และฉันเคยตั้งค่าการส่งต่อ ssh จากนั้นใส่รหัสนี้และปล่อยให้มันทำงานและใช้งานได้

import getpass
authtoken = getpass.getpass()

3

รหัสนี้ให้คลิก "รีเฟรชโฟลเดอร์" ในบานหน้าต่าง File explorer

function ClickRefresh(){
  console.log("Working"); 
  document.querySelector("[icon='colab:folder-refresh']").click()
}
const myjob = setInterval(ClickRefresh, 60000)

1
โปรดทราบว่าต้องขยายบานหน้าต่าง file explorer / โฟลเดอร์เพื่อให้ใช้งานได้
Kel Solaar

3

GNU Colabช่วยให้คุณสามารถเรียกใช้สภาพแวดล้อมเดสก์ท็อปถาวรแบบมาตรฐานบนอินสแตนซ์ Colaboratory

อันที่จริงมันมีกลไกที่จะไม่ให้เครื่องจักรตายจากการไม่ทำงาน

นี่เป็นวิดีโอสาธิต


2

คุณยังสามารถใช้ Python เพื่อกดปุ่มลูกศร ฉันเพิ่มการสุ่มเล็กน้อยในโค้ดต่อไปนี้ด้วย

from pyautogui import press, typewrite, hotkey
import time
from random import shuffle

array = ["left", "right", "up", "down"]

while True:
    shuffle(array)
    time.sleep(10)
    press(array[0])
    press(array[1])
    press(array[2])
    press(array[3])

โดยวิธีที่คุณอาจต้องการเข้าถึงเนื้อหาของarrayรหัสนี้ดูเหมือนจะถูกกำหนดทั้งหมดในการกด L, R, U, D ในแต่ละครั้ง
Marc Laugharn

ทำไมไม่for key in array: press(key)
Pixelzery

2

เพียงเรียกใช้โค้ดด้านล่างหลังจากเซลล์ที่คุณต้องการเรียกใช้เพื่อบันทึกจากการสูญหายของข้อมูล

!python

หากต้องการออกจากโหมดนี้ให้เขียน

exit()

2

ฉันกำลังมองหาวิธีแก้ปัญหาจนกระทั่งพบ Python3 ที่สุ่มเลื่อนเมาส์ไปมาและคลิกที่เดิมเสมอ แต่ก็เพียงพอแล้วที่จะหลอกให้ Colab คิดว่าฉันใช้งานอยู่ในโน้ตบุ๊กและไม่ได้ตัดการเชื่อมต่อ

import numpy as np
import time
import mouse
import threading

def move_mouse():
    while True:
        random_row = np.random.random_sample()*100
        random_col = np.random.random_sample()*10
        random_time = np.random.random_sample()*np.random.random_sample() * 100
        mouse.wheel(1000)
        mouse.wheel(-1000)
        mouse.move(random_row, random_col, absolute=False, duration=0.2)
        mouse.move(-random_row, -random_col, absolute=False, duration = 0.2)
        mouse.LEFT
        time.sleep(random_time)


x = threading.Thread(target=move_mouse)
x.start()

คุณต้องติดตั้งแพ็คเกจที่จำเป็น: sudo -H pip3 install <package_name> คุณต้องเรียกใช้ (ในเครื่องของคุณ) ด้วยsudo (เนื่องจากใช้ควบคุมเมาส์) และควรใช้งานได้ช่วยให้คุณใช้ประโยชน์จากเซสชัน 12 ชั่วโมงของ Colab ได้เต็มที่

เครดิต: สำหรับผู้ที่ใช้ Colab (Pro): การป้องกันไม่ให้ Session ตัดการเชื่อมต่อเนื่องจากไม่มีการใช้งาน


ฉันสงสัยว่าคุณจะต้องการใส่ไว้ในเธรดแยกเช่นกัน: D
FalconUA

@FalconUA เมื่อคืนฉันปล่อยให้ Colab ทำงานบนพีซีของฉันและเมื่อฉันตื่นขึ้นมาในตอนเช้าฉันพบว่ามันยังทำงานอยู่ ฉันเดาว่าสคริปต์ทำงานได้ดี แต่ฉันได้รับคำเตือนเกี่ยวกับเธรดคุณพูดถูก
ซิงเทรียม

1
function ClickConnect(){
    console.log("Clicked on connect button"); 
    document.querySelector("connect").click() // Change id here
}
setInterval(ClickConnect,60000)

ลองใช้รหัสด้านบนมันได้ผลสำหรับฉัน :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.