สคริปต์ perl ขั้นต่ำสำหรับซีลีเนียมคืออะไร?

Jan 03 2021

ฉันใช้ homebrew เพื่อติดตั้ง geckodriver และ chromedriver เวอร์ชันล่าสุด ฉันชอบแบบเก่ามากกว่า แต่ก็เต็มใจที่จะใช้ถ้าพวกเขาได้ผล ฉันได้ติดตั้งกับคอนโซล cpan ในโมดูล Selenium :: Remote :: Driver ด้วยและติดตั้งโดยไม่มีคำเตือนใด ๆ ฉันกำลังดำเนินการจากตัวอย่างโค้ดบนhttps://metacpan.org/pod/Selenium::Remote::Driver .

use Selenium::Remote::Driver;
 
my $driver = Selenium::Remote::Driver->new; $driver->get('http://www.google.com');
$driver->quit();

เมื่อฉันพยายามรันสคริปต์ฉันได้รับข้อผิดพลาดต่อไปนี้:

Selenium server did not return proper status at /Library/Perl/5.18/Selenium/Remote/Driver.pm line 544.

ตอนนี้ฉันไม่รู้ว่ากำลังทำอะไรอยู่ และฉันกำลังทำงานจากแหล่งที่มาของเว็บบางแห่งที่น่าจะเลิกใช้ ฉันจำเป็นต้องเรียกใช้ geckodriver (หรือ chromedriver) ด้วยตนเองก่อนจึงจะเริ่มได้หรือไม่? ถ้าไม่ฉันต้องระบุอย่างน้อยที่จะเรียกใช้รหัสของฉันหรือไม่? ทั้งสองอย่างมีอยู่ในเส้นทางของฉัน env มีส่วนประกอบที่สามที่ฉันยังไม่ได้ติดตั้งหรือไม่? Addon ของเบราว์เซอร์อาจเป็นได้?

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

คำตอบ

3 ikegami Jan 03 2021 at 13:29

แม้ว่าจะใช้เฉพาะ Chrome แต่สิ่งต่อไปนี้เป็นโซลูชันซีลีเนียมขั้นต่ำ:

use FindBin          qw( $RealBin ); use Selenium::Chrome qw( ); my $web_driver = Selenium::Chrome->new(
   binary => "$RealBin/chromedriver.exe", ); $web_driver->get('https://www.stackoverflow.com/');

$web_driver->shutdown_binary();

ฉันต้องการจัดการข้อยกเว้นดังนั้นฉันจึงใช้สิ่งนี้จริง:

use FindBin             qw( $RealBin );
use Selenium::Chrome    qw( );
use Sub::ScopeFinalizer qw( scope_finalizer );

my $web_driver; my $guard = scope_finalizer {
   if ($web_driver) { $web_driver->shutdown_binary();
      $web_driver = undef; } }; $web_driver = Selenium::Chrome->new(
   binary => "$RealBin/chromedriver.exe", ); $web_driver->get('https://www.stackoverflow.com/');