Upwork を Selenium で解析しようとしていて、例外が発生しています
スレッド "main" org.openqa.selenium.ElementNotVisibleException の例外:
そして、私はその理由を理解していません。リンク自体で、リンクを含む h2 要素をクリックしようとしましたが、同じ例外が発生します。開発ツールでこの要素のスタイルを確認し、この要素が表示されていることを確認します。
ExpectedConditions を使用して、要素が表示されるまで待ちますが、タイムアウト例外が発生します。何が間違っていて、どうすればこのリンクをクリックできますか?
もちろん、uri を使用して開くこともできますが、クリックで問題を解決したいです。
System.setProperty("webdriver.gecko.driver", "/usr/local/bin/geckodriver");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.upwork.com/o/jobs/browse/");
List<WebElement> titles = driver.findElements(By.className("job-title"));
for (WebElement title: titles) {
System.out.println("text: " + title.getAttribute("innerText"));
System.out.println("tag: " + title.getTagName());
title.click();
driver.navigate().back();
}
あなたが何をしようとしているのか正確にはわかりませんが、ウェブサイトをスクレイピングしようとしている場合、このアプローチは機能しない可能性があることをお伝えさせてください。これらの Web サイトにはボットを識別する機能が備わっており、遅かれ早かれコードを識別し、確認のためのキャプチャが提供されます。
しかし、あなたのコードについて話しましょう。要素が表示されないために失敗しています。可視性フラグが false であるか、サイズが利用できない、またはその他の理由が考えられます。簡単な修正は、href要素を取得することで、問題は解決します。
TODO コードを追加するだけで、このコードが実行されます。
WebDriver driver = new FirefoxDriver();
driver.get("https://www.upwork.com/o/jobs/browse/");
List<WebElement> titles = driver.findElements(By.xpath("//h2/a"));
for (int i=0; i<titles.size(); i++) {
//TODO add a code to wait until first page loaded
//To handle StaleElementReferenceException
WebElement title = driver.findElements(By.xpath("//h2/a")).get(i);
System.out.println("text: " + title.getAttribute("innerText"));
System.out.println("tag: " + title.getTagName());
title.click();
driver.navigate().back();
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加