মূল কারণ: আপনি যখনই সেলেনিয়াম ড্রাইভারের সাহায্যে কোনও পৃষ্ঠা লোড করছেন, driver
পৃষ্ঠাটি সম্পূর্ণ লোড না হওয়া পর্যন্ত স্ক্রিপ্ট অপেক্ষা করুন। তবে কখনও কখনও ওয়েবড্রাইভার পৃষ্ঠা লোড করতে আরও বেশি সময় নেয়, সেক্ষেত্রে TimeoutException
আপনি আপনার কনসোলটিতে ব্যতিক্রম দেখতে পাবেন ।
সমাধান: যখন পৃষ্ঠা লোডিংয়ে খুব বেশি সময় লাগে এবং আপনাকে অতিরিক্ত সাবস্রোর্সগুলি (চিত্র, সিএসএস, জেএস ইত্যাদি) ডাউনলোড বন্ধ করতে হবে আপনি ওয়েবড্রাইভারের মাধ্যমে পৃষ্ঠাটি লোডস্ট্রেটজি পরিবর্তন করতে পারবেন।
কোডের নীচে পৃষ্ঠা থেকে এইচটিএমএল সামগ্রীটি লোড করুন । আপনি ক্রোমোপশন থেকে পৃষ্ঠা লোড কৌশল সেট করতে পারেন
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NONE);
আপডেট সলিউশন -২: আমি দেবাঞ্জনবি-র সাথে একমত, পেজলড কৌশলটি কারও সাথেই নেই, অতিরিক্ত ফাইল ডাউনলোড না করে (চিত্র, সিএসএস, জেএস ইত্যাদি) পরীক্ষা করার সময় ভাল ধারণা হয় না। আমি এটি সম্পর্কে সমস্ত সমস্যা সন্ধান করেছি এবং একটি বৈধ সমাধান সন্ধান করার চেষ্টা করেছি। আমি বিকল্পগুলির নীচে চেষ্টা করেছি কারণ একসময় এটি এই সমস্যাটি সমাধান করতে সক্ষম হয়েছিল।
options.addArguments("start-maximized");
options.addArguments("enable-automation");
options.addArguments("--no-sandbox");
options.addArguments("--disable-infobars");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--disable-browser-side-navigation");
options.addArguments("--disable-gpu");
তাদের কেউই সহায়তা করেনি কিন্তু আমি পৃষ্ঠা লোড কৌশল নিয়ে আবার একটি সমাধান পেয়েছি। এই সময় আমরা সবাই subresources ডাউনলোড করছেন কিন্তু আমরা জন্য অপেক্ষা হয় DOMContentLoaded ইভেন্ট। এই কৌশলটি এগার নামে পরিচিত । সমস্ত 3 পৃষ্ঠা লোড কৌশল উপলব্ধ উপলব্ধ একটি ছোট সংজ্ঞা
1. সাধারণ:
এই কৌশলটির ফলে সেলেনিয়াম পূর্ণ পৃষ্ঠা লোড হওয়ার জন্য অপেক্ষা করতে পারে (এইচটিএমএল সামগ্রী এবং উপসম্পদ ডাউনলোড এবং বিশ্লেষণ করা)।
উত্সাহী:
এই কৌশলটি সেলেনিয়ামকে DOMContentLoaded ইভেন্টের জন্য অপেক্ষা করার কারণ ঘটায় (এইচটিএমএল সামগ্রী কেবল ডাউনলোড এবং পার্স করা হয়েছে)।
৩.
কোনওটি নয়: এই কৌশলটি প্রাথমিক পৃষ্ঠাগুলি সম্পূর্ণরূপে প্রাপ্ত হওয়ার পরে অবিলম্বে সেলেনিয়ামকে ফিরিয়ে আনবে (এইচটিএমএল সামগ্রী ডাউনলোড করা)।
নোট: ডিফল্টরূপে, যখন সেলেনিয়াম কোনও পৃষ্ঠা লোড করে, এটি সাধারণ পৃষ্ঠাটি লোডস্ট্রেটজি অনুসরণ করে।
পেজলোড কৌশল ব্যবহার না করে কোড স্নিপেট (বা সাধারণ হিসাবে সেলেনিয়াম দ্বারা ব্যবহৃত সাধারণ)
System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();
কনসোল আউটপুট:
পোর্ট 41540- এ ক্রোমড্রাইভার 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / ব্রাঞ্চ-প্রধান / 3987 @ {# 185}) শুরু করা হচ্ছে কেবল স্থানীয় সংযোগের অনুমতি রয়েছে। দূষিত কোডের মাধ্যমে অ্যাক্সেস রোধ করতে দয়া করে ChromeDriver দ্বারা ব্যবহৃত পোর্টগুলি এবং সম্পর্কিত পরীক্ষা ফ্রেমওয়ার্কগুলি সুরক্ষিত করুন। ফেব্রুয়ারী 11, 2020 10:22:12 এএম org.openqa.selenium.remote. প্রোটোকল হ্যান্ডশেক তৈরি সেশন ইনফো: সনাক্ত করা উপভাষা: ডাব্লু 3 সি [1581412933.937] [সভার]: রেন্ডারারের বার্তা গ্রহণের সময়সীমা শেষ হয়েছে: 0.100 [1581412934.066] সময়সীমা শেষ রেন্ডারারের কাছ থেকে বার্তা প্রাপ্তি: 0.100 [1581412934.168] [সভার]: রেন্ডারকারীর কাছ থেকে বার্তা গ্রহণের সময়সীমা শেষ হয়েছে: 0.100 [1581412934.360] [এসভার]: রেন্ডারারের বার্তা গ্রহণের সময়সীমা শেষ হয়েছে: 0.100 [1581412934.461] [সভার]: সময়দাতাদের কাছ থেকে প্রাপ্ত বার্তা প্রাপ্ত 0.100 [1581412934.618] [SEVERE]:
পেজলড কৌশল সহ - আগ্রহী:
টুকিটাকি সংকেতলিপি:
System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver=new ChromeDriver(options);
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();
কনসোল আউটপুট:
ক্রোমড্রাইভার 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / ব্রাঞ্চ-প্রধান / 3987 @ {# 185}) বন্দর 1175 এ শুরু করা হচ্ছে কেবল স্থানীয় সংযোগের অনুমতি রয়েছে। দূষিত কোডের মাধ্যমে অ্যাক্সেস রোধ করতে দয়া করে ChromeDriver দ্বারা ব্যবহৃত পোর্টগুলি এবং সম্পর্কিত পরীক্ষা ফ্রেমওয়ার্কগুলি সুরক্ষিত করুন। ফেব্রুয়ারী 11, 2020 10:29:05 এএম org.openqa.selenium.remote. প্রোটোকল হ্যান্ডশেক তৈরি সেশন ইনফো: সনাক্তকারী উপভাষা: ডাব্লু 3 সি
21