วิธีค้นหาองค์ประกอบด้วยข้อความด้วยซีลีเนียม

How Find Element Text With Selenium



การค้นหาและเลือกองค์ประกอบจากหน้าเว็บเป็นกุญแจสำคัญในการขูดเว็บด้วยซีลีเนียม คุณสามารถเลือกองค์ประกอบโดยใช้ชื่อแท็ก, ID, ชื่อคลาส, ตัวเลือก XPath, ตัวเลือก CSS ฯลฯ ใน Selenium คุณยังสามารถเลือกองค์ประกอบที่มีข้อความเฉพาะด้วยซีลีเนียมได้ ซึ่งจะเป็นประโยชน์สำหรับการเลือกลิงก์และปุ่มจากหน้าเว็บได้อย่างง่ายดาย แม้ว่าโครงสร้างของหน้าจะเปลี่ยนไป ตราบใดที่ข้อความขององค์ประกอบหน้าเว็บยังคงเหมือนเดิม ตัวเลือกของคุณควรทำงานได้ดี นี่คือข้อดีของการเลือกลิงก์และปุ่มโดยใช้ข้อความในซีลีเนียม

ในบทความนี้ ผมจะแสดงวิธีค้นหาและเลือกองค์ประกอบจากหน้าเว็บโดยใช้ข้อความใน Selenium ด้วยไลบรารี Selenium python มาเริ่มกันเลยดีกว่า







ข้อกำหนดเบื้องต้น:

หากต้องการลองใช้คำสั่งและตัวอย่างของบทความนี้ คุณต้องมี:



  1. การกระจาย Linux (ควรเป็น Ubuntu) ที่ติดตั้งบนคอมพิวเตอร์ของคุณ
  2. Python 3 ติดตั้งบนคอมพิวเตอร์ของคุณ
  3. PIP 3 ติดตั้งบนคอมพิวเตอร์ของคุณ
  4. Python virtualenv แพ็คเกจที่ติดตั้งบนคอมพิวเตอร์ของคุณ
  5. เว็บเบราว์เซอร์ Mozilla Firefox หรือ Google Chrome ที่ติดตั้งบนคอมพิวเตอร์ของคุณ
  6. ต้องทราบวิธีการติดตั้งไดรเวอร์ Firefox Gecko หรือ Chrome Web Driver

หากต้องการปฏิบัติตามข้อกำหนด 4, 5 และ 6 โปรดอ่านบทความของฉัน รู้เบื้องต้นเกี่ยวกับซีลีเนียมใน Python 3 .



คุณสามารถค้นหาบทความมากมายในหัวข้ออื่น ๆ ได้ที่ LinuxHint.com . อย่าลืมตรวจสอบหากคุณต้องการความช่วยเหลือ





การตั้งค่าไดเรกทอรีโครงการ:

เพื่อให้ทุกอย่างเป็นระเบียบ ให้สร้างไดเร็กทอรีโครงการใหม่ selenium-text-select/ ดังนี้

$mkdir -pvselenium-text-select/คนขับรถ



นำทางไปยัง selenium-text-select/ ไดเรกทอรีโครงการดังต่อไปนี้:

$ซีดีselenium-text-select/

สร้างสภาพแวดล้อมเสมือน Python ในไดเร็กทอรีโครงการดังนี้:

$virtualenv .venv

เปิดใช้งานสภาพแวดล้อมเสมือนดังต่อไปนี้:

$แหล่งที่มา.venv/เป็น/เปิดใช้งาน

ติดตั้งไลบรารี Selenium Python โดยใช้ PIP3 ดังนี้:

$ pip3 ติดตั้งซีลีเนียม

ดาวน์โหลดและติดตั้งไดรเวอร์เว็บที่จำเป็นทั้งหมดในไฟล์ คนขับรถ/ ไดเรกทอรีของโครงการ ฉันได้อธิบายขั้นตอนการดาวน์โหลดและติดตั้งไดรเวอร์เว็บในบทความของฉันแล้ว รู้เบื้องต้นเกี่ยวกับซีลีเนียมใน Python 3 .

การค้นหาองค์ประกอบด้วยข้อความ:

ในส่วนนี้ ฉันจะแสดงตัวอย่างการค้นหาและเลือกองค์ประกอบหน้าเว็บตามข้อความด้วยไลบรารี Selenium Python

ฉันจะเริ่มต้นด้วยตัวอย่างที่ง่ายที่สุดในการเลือกองค์ประกอบของหน้าเว็บตามข้อความ โดยเลือกลิงก์จากหน้าเว็บ

ในหน้าล็อกอินของ facebook.com เรามีลิงค์ ลืมบัญชี? ดังที่คุณเห็นในภาพหน้าจอด้านล่าง มาเลือกลิงค์นี้กับ Selenium

สร้างสคริปต์ Python ใหม่ ex01.py และพิมพ์รหัสบรรทัดต่อไปนี้ลงไป

จากซีลีเนียมนำเข้าไดรเวอร์เว็บ
จากซีลีเนียม.ไดรเวอร์เว็บ.ทั่วไป.กุญแจ นำเข้ากุญแจ
จากซีลีเนียม.ไดรเวอร์เว็บ.ทั่วไป.โดย นำเข้าโดย
จาก เวลา นำเข้านอน
เบราว์เซอร์=ไดรเวอร์เว็บโครเมียม(executable_path='./drivers/chromedriver')
เบราว์เซอร์รับ('https://www.facebook.com/')
ลืมบัญชีลิงค์=เบราว์เซอร์find_element(โดย.XPATH, '
//*[text()='ลืมบัญชี?']'
)
ลืมลิงก์บัญชีsend_keys(กุญแจเข้าสู่)

เมื่อเสร็จแล้วให้บันทึก ex01.py สคริปต์ไพทอน

บรรทัดที่ 1-4 นำเข้าส่วนประกอบที่จำเป็นทั้งหมดลงในโปรแกรม Python

บรรทัดที่ 6 สร้าง Chrome เบราว์เซอร์ วัตถุโดยใช้ chromedriver เลขฐานสองจาก คนขับรถ/ ไดเรกทอรีของโครงการ

บรรทัดที่ 8 บอกให้เบราว์เซอร์โหลดเว็บไซต์ facebook.com

บรรทัดที่ 10 พบลิงค์ที่มีข้อความ ลืมบัญชี? การใช้ตัวเลือก XPath เพื่อการนั้น ฉันจึงใช้ตัวเลือก XPath //*[text()='ลืมบัญชี?'] .

ตัวเลือก XPath เริ่มต้นด้วย //, ซึ่งหมายความว่าองค์ประกอบสามารถอยู่ที่ใดก็ได้บนหน้า NS * สัญลักษณ์บอกให้ซีลีเนียมเลือกแท็กใด ๆ ( ถึง หรือ NS หรือ ช่วง เป็นต้น) ที่ตรงกับเงื่อนไขภายในวงเล็บเหลี่ยม [] . ในที่นี้เงื่อนไขคือข้อความองค์ประกอบเท่ากับ ลืมบัญชี?

NS ข้อความ() ฟังก์ชัน XPath ใช้เพื่อรับข้อความขององค์ประกอบ

ตัวอย่างเช่น, ข้อความ() ผลตอบแทน สวัสดีชาวโลก หากเลือกองค์ประกอบ HTML ต่อไปนี้

< ถึง href='http://dummysite.com'>สวัสดีชาวโลก</ ถึง >

สาย 11 ส่ง กดปุ่มเพื่อ ลืมบัญชี? ลิงค์.

เรียกใช้สคริปต์ Python ex01.py ด้วยคำสั่งดังนี้

$ หลาม ex01.พาย

ดังที่คุณเห็น เว็บเบราว์เซอร์จะค้นหา เลือก และกด กุญแจบน ลืมบัญชี? ลิงค์.

NS ลืมบัญชี? ลิงก์จะนำเบราว์เซอร์ไปยังหน้าต่อไปนี้

ในทำนองเดียวกัน คุณสามารถค้นหาองค์ประกอบที่มีค่าแอตทริบิวต์ที่คุณต้องการได้อย่างง่ายดาย

ที่นี่ เข้าสู่ระบบ ปุ่มคือ ป้อนข้อมูล องค์ประกอบที่มี ค่า คุณลักษณะ เข้าสู่ระบบ . มาดูวิธีการเลือกองค์ประกอบนี้ด้วยข้อความ

สร้างสคริปต์ Python ใหม่ ex02.py และพิมพ์รหัสบรรทัดต่อไปนี้ลงไป

จากซีลีเนียมนำเข้าไดรเวอร์เว็บ
จากซีลีเนียม.ไดรเวอร์เว็บ.ทั่วไป.กุญแจ นำเข้ากุญแจ
จากซีลีเนียม.ไดรเวอร์เว็บ.ทั่วไป.โดย นำเข้าโดย
จาก เวลา นำเข้านอน
เบราว์เซอร์=ไดรเวอร์เว็บโครเมียม(executable_path='./drivers/chromedriver')
เบราว์เซอร์รับ('https://www.facebook.com/')
นอน(5)
emailInput=เบราว์เซอร์find_element(โดย.XPATH, '//input[@id='email']')
รหัสผ่านอินพุต=เบราว์เซอร์find_element(โดย.XPATH, '//input[@id='pass']')
เข้าสู่ระบบปุ่ม=เบราว์เซอร์find_element(โดย.XPATH, '//*[@value='Log In']')
อีเมลอินพุตsend_keys(' [ป้องกันอีเมล] ')
นอน(5)
รหัสผ่านอินพุตsend_keys('ความลับผ่าน')
นอน(5)
ปุ่มเข้าสู่ระบบsend_keys(กุญแจเข้าสู่)

เมื่อเสร็จแล้วให้บันทึก ex02.py สคริปต์ไพทอน

บรรทัดที่ 1-4 นำเข้าส่วนประกอบที่จำเป็นทั้งหมด

บรรทัดที่ 6 สร้าง Chrome เบราว์เซอร์ วัตถุโดยใช้ chromedriver เลขฐานสองจาก คนขับรถ/ ไดเรกทอรีของโครงการ

บรรทัดที่ 8 บอกให้เบราว์เซอร์โหลดเว็บไซต์ facebook.com

ทุกอย่างเกิดขึ้นเร็วมากเมื่อคุณเรียกใช้สคริปต์ ดังนั้นฉันจึงใช้ นอน() ทำงานหลายครั้งใน ex02.py สำหรับการหน่วงเวลาคำสั่งเบราว์เซอร์ ด้วยวิธีนี้ คุณจะสังเกตได้ว่าทุกอย่างทำงานอย่างไร

บรรทัดที่ 11 ค้นหากล่องข้อความป้อนอีเมลและจัดเก็บการอ้างอิงขององค์ประกอบใน emailInput ตัวแปร.

บรรทัดที่ 12 ค้นหากล่องข้อความป้อนอีเมลและจัดเก็บการอ้างอิงขององค์ประกอบใน emailInput ตัวแปร.

บรรทัดที่ 13 ค้นหาองค์ประกอบอินพุตที่มีแอตทริบิวต์ ค่า ของ เข้าสู่ระบบ โดยใช้ตัวเลือก XPath เพื่อการนั้น ฉันจึงใช้ตัวเลือก XPath //*[@value='เข้าสู่ระบบ'] .

ตัวเลือก XPath เริ่มต้นด้วย // . หมายความว่าองค์ประกอบสามารถอยู่ที่ใดก็ได้บนหน้า NS * สัญลักษณ์บอกให้ซีลีเนียมเลือกแท็กใด ๆ ( ป้อนข้อมูล หรือ NS หรือ ช่วง เป็นต้น) ที่ตรงกับเงื่อนไขภายในวงเล็บเหลี่ยม [] . ในที่นี้เงื่อนไขคือแอตทริบิวต์ขององค์ประกอบ ค่า เท่ากับ เข้าสู่ระบบ .

บรรทัดที่ 15 ส่งข้อมูลเข้า[ป้องกันอีเมล]ไปที่กล่องข้อความป้อนอีเมล และบรรทัดที่ 16 จะทำให้การดำเนินการถัดไปล่าช้า

บรรทัดที่ 18 ส่งรหัสลับการป้อนข้อมูลไปยังกล่องข้อความป้อนรหัสผ่าน และบรรทัดที่ 19 จะชะลอการดำเนินการต่อไป

สาย 21 ส่ง กดปุ่มเพื่อเข้าสู่ระบบปุ่ม

เรียกใช้ ex02.py สคริปต์ Python ด้วยคำสั่งต่อไปนี้:

$ python3 ex02.พาย

อย่างที่คุณเห็น กล่องข้อความอีเมลและรหัสผ่านเต็มไปด้วยค่าจำลองของเรา และ เข้าสู่ระบบ กดปุ่ม

จากนั้นหน้าจะนำทางไปยังหน้าต่อไปนี้

การค้นหาองค์ประกอบตามข้อความบางส่วน:

ในส่วนก่อนหน้านี้ ฉันได้แสดงวิธีค้นหาองค์ประกอบด้วยข้อความเฉพาะ ในส่วนนี้ ฉันจะแสดงวิธีค้นหาองค์ประกอบจากหน้าเว็บโดยใช้ข้อความบางส่วน

ในตัวอย่าง ex01.py ฉันได้ค้นหาองค์ประกอบลิงก์ที่มีข้อความ ลืมบัญชี? . คุณสามารถค้นหาองค์ประกอบลิงก์เดียวกันได้โดยใช้ข้อความบางส่วน เช่น ลืม acc . ในการทำเช่นนั้น คุณสามารถใช้ ประกอบด้วย() ฟังก์ชัน XPath ดังแสดงในบรรทัดที่ 10 ของ ex03.py . รหัสที่เหลือเหมือนกับใน ex01.py . ผลลัพธ์จะเหมือนกัน

ในบรรทัดที่ 10 ของ ex03.py , เงื่อนไขการเลือกใช้ the ประกอบด้วย (ที่มา, ข้อความ) ฟังก์ชัน XPath ฟังก์ชันนี้รับ 2 อาร์กิวเมนต์ แหล่งที่มา, และ ข้อความ .

NS ประกอบด้วย() ฟังก์ชั่นตรวจสอบว่า ข้อความ ระบุในอาร์กิวเมนต์ที่สองบางส่วนตรงกับ แหล่งที่มา ค่าในอาร์กิวเมนต์แรก

แหล่งที่มาสามารถเป็นข้อความขององค์ประกอบ ( ข้อความ() ) หรือค่าแอตทริบิวต์ขององค์ประกอบ ( @attr_name ).

ใน ex03.py , ข้อความขององค์ประกอบจะถูกตรวจสอบ

ฟังก์ชัน XPath ที่มีประโยชน์อีกอย่างหนึ่งในการค้นหาองค์ประกอบจากหน้าเว็บโดยใช้ข้อความบางส่วนคือ เริ่มต้นด้วย (ที่มา, ข้อความ) . ฟังก์ชันนี้มีอาร์กิวเมนต์เหมือนกับ the ประกอบด้วย() และใช้งานในลักษณะเดียวกัน ข้อแตกต่างเพียงอย่างเดียวคือ เริ่มต้นด้วย() ฟังก์ชั่นตรวจสอบว่าอาร์กิวเมนต์ที่สอง ข้อความ เป็นสตริงเริ่มต้นของอาร์กิวเมนต์แรก แหล่งที่มา .

ฉันได้เขียนตัวอย่างใหม่ ex03.py เพื่อค้นหาองค์ประกอบที่ข้อความเริ่มต้นด้วย ลืม ดังที่คุณเห็นในบรรทัดที่ 10 ของ ex04.py . ผลลัพธ์จะเหมือนกับใน ex02 และ ex03.py .

ฉันยังเขียนใหม่ ex02.py เพื่อที่จะค้นหาองค์ประกอบอินพุตที่ ค่า แอตทริบิวต์เริ่มต้นด้วย บันทึก, ดังที่คุณเห็นในบรรทัดที่ 13 ของ ex05.py . ผลลัพธ์จะเหมือนกับใน ex02.py .

บทสรุป:

ในบทความนี้ ฉันได้แสดงวิธีค้นหาและเลือกองค์ประกอบจากหน้าเว็บด้วยข้อความด้วยไลบรารี Selenium Python ตอนนี้ คุณควรจะสามารถค้นหาองค์ประกอบจากหน้าเว็บด้วยข้อความเฉพาะหรือข้อความบางส่วนด้วยไลบรารี Selenium Python