ความสามารถและตัวเลือก Chrome

ความสามารถคือตัวเลือกที่คุณสามารถใช้เพื่อปรับแต่งและกําหนดค่าเซสชัน ChromeDriver หน้านี้จะแสดงความสามารถทั้งหมดที่ ChromeDriver รองรับและวิธีใช้

WebDriver Language API มีวิธีส่งความสามารถไปยัง ChromeDriver กลไกที่แน่นอนจะแตกต่างกันไปตามภาษา แต่ภาษาส่วนใหญ่ใช้กลไกอย่างใดอย่างหนึ่งหรือทั้ง 2 กลไกต่อไปนี้

  1. ใช้คลาส ChromeOptions ซึ่ง Java, Python และอื่นๆ รองรับ
  2. ใช้คลาส DesiredCapabilities ซึ่ง Python, Ruby และอื่นๆ รองรับการดำเนินการนี้ แม้ว่าจะใช้งานได้ใน Java แต่เราก็เลิกใช้งานการดำเนินการนี้ใน Java แล้ว

การใช้คลาส ChromeOptions

คุณสามารถสร้างอินสแตนซ์ของ ChromeOptions ซึ่งมีเมธอดที่สะดวกสำหรับการตั้งค่าความสามารถเฉพาะของ ChromeDriver จากนั้นคุณสามารถส่งออบเจ็กต์ ChromeOptions ไปยังคอนสตรัคเตอร์ ChromeDriver ดังนี้

ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("/path/to/extension.crx"));
ChromeDriver driver = new ChromeDriver(options);

ตั้งแต่ Selenium เวอร์ชัน 3.6.0 คลาส ChromeOptions ใน Java จะใช้อินเทอร์เฟซ Capabilities ด้วย ซึ่งช่วยให้คุณระบุความสามารถอื่นๆ ของ WebDriver ที่ไม่ใช่ความสามารถเฉพาะของ ChromeDriver ได้

ChromeOptions options = new ChromeOptions();

// Add the WebDriver proxy capability.
Proxy proxy = new Proxy();
proxy.setHttpProxy("myhttpproxy:3337");
options.setCapability("proxy", proxy);

// Add a ChromeDriver-specific capability.
options.addExtensions(new File("/path/to/extension.crx"));
ChromeDriver driver = new ChromeDriver(options);

ใช้ DesiredCapabilities

หากต้องการใช้ DesiredCapabilities คุณต้องทราบชื่อของความสามารถและประเภทค่าที่รับ ดูรายการทั้งหมด

Python

caps = webdriver.DesiredCapabilities.CHROME.copy()
caps['acceptInsecureCerts'] = True
driver = webdriver.Chrome(desired_capabilities=caps)

Ruby

caps = Selenium::WebDriver::Remote::Capabilities.chrome(
  "goog:chromeOptions" => {"args" => [ "window-size=1000,800" ]})
driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps

กรณีการใช้งานทั่วไป

ใช้โปรไฟล์ที่กำหนดเอง

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

หากใช้โปรไฟล์ชั่วคราว คุณสามารถใช้ความสามารถ chrome.prefs เพื่อระบุค่ากําหนดที่จะมีผลหลังจาก Chrome เริ่มทํางาน สำหรับโปรไฟล์ที่กำหนดเอง คุณสามารถใช้user-data-dirสวิตช์บรรทัดคำสั่งของ Chrome เพื่อบอกให้ Chrome ใช้โปรไฟล์ใดก็ได้ ดังนี้

ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir=/path/to/your/custom/profile");

สร้างโปรไฟล์ที่กำหนดเองของคุณเองโดยเรียกใช้ Chrome ในบรรทัดคำสั่งหรือใช้ ChromeDriver โดยตั้งค่าสวิตช์ user-data-dir เป็นไดเรกทอรีใหม่

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

เริ่ม Chrome โดยขยายหน้าจอ

เริ่ม Chrome แบบขยายเต็มหน้าจอโดยใช้สวิตช์ start-maximized โดยทำดังนี้

ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");

ใช้ไฟล์ปฏิบัติการของ Chrome ในตำแหน่งที่ไม่ใช่มาตรฐาน

ChromeOptions options = new ChromeOptions();
options.setBinary("/path/to/other/chrome/binary");

บล็อกหน้าต่างกล่องโต้ตอบ

โดยค่าเริ่มต้น ChromeDriver จะกำหนดค่า Chrome ให้อนุญาตหน้าต่างป๊อปอัป หากต้องการบล็อกป๊อปอัปและคืนค่าลักษณะการทำงานปกติของ Chrome เมื่อไม่ได้ควบคุมโดย ChromeDriver ให้ทําดังนี้

ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("excludeSwitches",
     Arrays.asList("disable-popup-blocking"));

ตั้งค่าไดเรกทอรีการดาวน์โหลด

คุณสามารถใช้โค้ดต่อไปนี้เพื่อกำหนดค่า Chrome ให้ดาวน์โหลดไฟล์ไปยังไดเรกทอรีที่เฉพาะเจาะจง อย่างไรก็ตาม โปรดคำนึงถึงข้อควรระวังต่อไปนี้

  • Chrome ไม่อนุญาตให้ใช้ไดเรกทอรีบางรายการสำหรับการดาวน์โหลด โดยเฉพาะอย่างยิ่ง คุณจะใช้โฟลเดอร์เดสก์ท็อปเป็นไดเรกทอรีการดาวน์โหลดไม่ได้ ใน Linux คุณจะใช้ไดเรกทอรีหน้าแรกเพื่อดาวน์โหลดไม่ได้ รายการไดเรกทอรีต้องห้ามที่แน่นอนอาจเปลี่ยนแปลงได้ เราจึงขอแนะนำให้คุณใช้ไดเรกทอรีที่ไม่ซ้ำกันซึ่งไม่มีความหมายพิเศษต่อระบบ
  • ChromeDriver จะไม่รอให้ดาวน์โหลดเสร็จสมบูรณ์โดยอัตโนมัติ หากคุณเรียกใช้ driver.quit() เร็วเกินไป Chrome อาจสิ้นสุดการทำงานก่อนที่การดาวน์โหลดจะเสร็จสมบูรณ์
  • ใช้เส้นทางแบบเต็มเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด เนื่องจากเส้นทางแบบสัมพัทธ์อาจใช้ไม่ได้เสมอไป
  • ใน Windows ให้ใช้ \` as path separators./` ซึ่งไม่น่าเชื่อถือใน Windows
ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("download.default_directory", "/directory/path");
options.setExperimentalOption("prefs", prefs);

ความสามารถที่รู้จัก

อ่านเอกสารประกอบของ Selenium และมาตรฐาน W3C WebDriver เพื่อดูความสามารถมาตรฐานที่ ChromeDriver ยอมรับ ต่อไปนี้เป็นรายการความสามารถเฉพาะของ Chrome

วัตถุ ChromeOptions รายการ

ความสามารถส่วนใหญ่ของ Chrome จะแสดงผ่านออบเจ็กต์ ChromeOptions ในบางภาษา คลาส ChromeOptions จะใช้งาน ในภาษาอื่นๆ ระบบจะจัดเก็บคำดังกล่าวไว้ในพจนานุกรม goog:chromeOptions ในความสามารถที่เลือก

ชื่อ ประเภท ค่าเริ่มต้น คำอธิบาย
args รายการสตริง    รายการอาร์กิวเมนต์บรรทัดคำสั่งที่จะใช้เมื่อเริ่ม Chrome ควรคั่นอาร์กิวเมนต์ที่มีค่าเชื่อมโยงด้วยเครื่องหมาย "=" (เช่น ['start-maximized', 'user-data-dir=/tmp/temp_profile']) ดูรายการอาร์กิวเมนต์ของ Chrome
binary สตริง   เส้นทางไปยังไฟล์ปฏิบัติการ Chrome ที่จะใช้
ใน macOS X ไฟล์นี้ควรเป็นไฟล์ไบนารีจริง ไม่ใช่แค่แอป เช่น /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
extensions รายการสตริง   รายการส่วนขยาย Chrome ที่จะติดตั้งเมื่อเริ่มต้น แต่ละรายการในรายการควรเป็นส่วนขยาย Chrome (.crx) ที่แพ็กและเข้ารหัสฐาน 64
localState พจนานุกรม   พจนานุกรมที่มีแต่ละรายการประกอบด้วยชื่อของค่ากําหนดและค่าของค่ากําหนด ค่ากําหนดเหล่านี้จะมีผลกับไฟล์สถานะในเครื่องในโฟลเดอร์ข้อมูลผู้ใช้
prefs พจนานุกรม   พจนานุกรมที่มีแต่ละรายการประกอบด้วยชื่อของค่ากําหนดและค่าของค่ากําหนด ค่ากําหนดเหล่านี้จะมีผลกับโปรไฟล์ผู้ใช้ที่ใช้อยู่เท่านั้น ดูตัวอย่างได้ในไฟล์ "ค่ากําหนด" ในไดเรกทอรีข้อมูลผู้ใช้ของ Chrome
detach บูลีน เท็จ หากเป็นเท็จ ระบบจะปิด Chrome เมื่อหยุด ChromeDriver ไม่ว่าจะมีการปิดเซสชันหรือไม่ก็ตาม
หากเป็น "จริง" Chrome จะปิดเฉพาะในกรณีที่เซสชันปิดหรือสิ้นสุด หากเป็น "จริง" และเซสชันยังไม่สิ้นสุด ChromeDriver จะล้างข้อมูลไดเรกทอรีผู้ใช้ชั่วคราวที่อินสแตนซ์ Chrome ที่ทำงานอยู่ใช้อยู่ไม่ได้
debuggerAddress สตริง 
ที่อยู่ของเซิร์ฟเวอร์โปรแกรมแก้ไขข้อบกพร่องของ Chrome เพื่อเชื่อมต่อในรูปแบบ <hostname/ip:port> เช่น "127.0.0.1:38947"
excludeSwitches รายการสตริง    รายการสวิตช์บรรทัดคำสั่งของ Chrome เพื่อยกเว้น ChromeDriver ที่ส่งโดยค่าเริ่มต้นเมื่อเริ่ม Chrome อย่าใส่ -- เป็นคำนำหน้าสวิตช์
minidumpPath สตริง    ไดเรกทอรีสำหรับจัดเก็บมินิดัมพ์ของ Chrome (รองรับเฉพาะใน Linux)
mobileEmulation พจนานุกรม   พจนานุกรมที่มีค่าสำหรับ "deviceName" หรือค่าสำหรับ "deviceMetrics" และ "userAgent" ดูข้อมูลเพิ่มเติมได้ที่การจําลองอุปกรณ์เคลื่อนที่
perfLoggingPrefs พจนานุกรม   พจนานุกรมที่ไม่บังคับซึ่งระบุค่ากําหนดการบันทึกประสิทธิภาพ โปรดดูข้อมูลเพิ่มเติมด้านล่าง
windowTypes รายการสตริง   รายการประเภทหน้าต่างที่ปรากฏในรายการแฮนเดิลหน้าต่าง หากต้องการเข้าถึงองค์ประกอบ WebView ให้ใส่ "webview" ไว้ในรายการนี้
enableExtensionTargets บูลีน เท็จ เปิดใช้การตรวจสอบข้อมูลเป้าหมายส่วนขยาย Chrome โดยค่าเริ่มต้น ChromeDriver จะไม่รวมเป้าหมายส่วนขยาย (จาก Chrome 136)

วัตถุ perfLoggingPrefs รายการ

พจนานุกรม perfLoggingPrefs มีรูปแบบดังต่อไปนี้ โดยคุณไม่จำเป็นต้องระบุคีย์ใดเลย

ชื่อ ประเภท ค่าเริ่มต้น คำอธิบาย
enableNetwork บูลีน จริง เลือกว่าจะรวบรวมเหตุการณ์จากโดเมนเครือข่ายหรือไม่
enablePage บูลีน จริง เลือกว่าจะรวบรวมเหตุการณ์จากโดเมนหน้าเว็บหรือไม่
traceCategories สตริง (ว่าง) สตริงหมวดหมู่การติดตามของ Chrome ที่คั่นด้วยคอมมา ซึ่งควรรวบรวมเหตุการณ์การติดตาม สตริงที่ไม่มีการระบุหรือสตริงว่างจะปิดใช้การติดตาม
bufferUsageReportingInterval จํานวนเต็มบวก 1000 จํานวนมิลลิวินาทีที่ขอระหว่างเหตุการณ์การใช้บัฟเฟอร์การติดตามของ DevTools ตัวอย่างเช่น หากเป็น 1000 แสดงว่า DevTools จะรายงานความเต็มของบัฟเฟอร์การติดตาม 1 ครั้งต่อวินาที หากรายงานระบุว่ามีการใช้บัฟเฟอร์ 100% ระบบจะแสดงคำเตือน

ความสามารถที่ส่งคืน

ต่อไปนี้คือรายการความสามารถทั้งหมดที่ Chrome แสดงผล กล่าวคือสิ่งที่ ChromeDriver แสดงผลเมื่อคุณสร้างเซสชันใหม่

ชื่อ ประเภท คำอธิบาย
chrome.chromedriverVersion สตริง เวอร์ชันของ ChromeDriver
userDataDir สตริง เส้นทางไปยังไดเรกทอรีข้อมูลผู้ใช้ที่ Chrome ใช้ โปรดทราบว่ารายการนี้อยู่ภายในพจนานุกรม "chrome"