ChatGPTで、解決方法を聞いてみたら、いい方法があることを知った。
IList<IWebElement> Iwels = FindElementsWithWait(mainDriver, By.XPath("//*[@id=\"sr\"]/ul/li"), 20);
foreach (IWebElement iel in Iwels)
{
IWebDriver tmpDriver = mainDriver;
try
{
IWebElement link_question = iel.FindElement(By.XPath("./h3/a"));
link_question.Click();
IWebElement i_question = SeleniumHelper.FindElementWithWait(
tmpDriver,
By.XPath("//*[@id=\"leftColumn\"]/article[1]"),
10
);
//ここでi_questionを使い相対パスで目的データを取得
}
catch (Exception ex)
{
}
}
ChatGPTに質問「このようなコードだと、エラーが発生します。おそらく、foreachしている間にwedDriverが最初のものとかわってしまうことが原因だと思います。最初のページからスクレイピングできないのが原因だと思います。何かいい方法あるのでしょうか?」
foreach (IWebElement iel in Iwels)
{
try
{
IWebElement link_question = iel.FindElement(By.XPath("./h3/a"));
string questionUrl = link_question.GetAttribute("href");
((IJavaScriptExecutor)mainDriver).ExecuteScript($"window.open('{questionUrl}', '_blank');");
mainDriver.SwitchTo().Window(mainDriver.WindowHandles.Last());
IWebElement i_question = SeleniumHelper.FindElementWithWait(
mainDriver,
By.XPath("//*[@id=\"leftColumn\"]/article[1]"),
10
);
//ここでi_questionを使い相対パスで目的データを取得
foreach (IWebElement iel in Iwels)
{
IWebDriver tmpDriver = mainDriver;
try
{
IWebElement link_question = iel.FindElement(By.XPath("./h3/a"));
link_question.Click();
IWebElement i_question = SeleniumHelper.FindElementWithWait(
tmpDriver,
By.XPath("//*[@id=\"leftColumn\"]/article[1]"),
10
);
//ここでi_questionを使い相対パスで目的データを取得
}
catch (Exception ex)
{
}
}
ChatGPTに質問「このようなコードだと、エラーが発生します。おそらく、foreachしている間にwedDriverが最初のものとかわってしまうことが原因だと思います。最初のページからスクレイピングできないのが原因だと思います。何かいい方法あるのでしょうか?」
foreach (IWebElement iel in Iwels)
{
try
{
IWebElement link_question = iel.FindElement(By.XPath("./h3/a"));
string questionUrl = link_question.GetAttribute("href");
((IJavaScriptExecutor)mainDriver).ExecuteScript($"window.open('{questionUrl}', '_blank');");
mainDriver.SwitchTo().Window(mainDriver.WindowHandles.Last());
IWebElement i_question = SeleniumHelper.FindElementWithWait(
mainDriver,
By.XPath("//*[@id=\"leftColumn\"]/article[1]"),
10
);
//ここでi_questionを使い相対パスで目的データを取得
mainDriver.Close();
mainDriver.SwitchTo().Window(mainDriver.WindowHandles.First());
}
catch (Exception ex)
{
}
}
0 件のコメント:
コメントを投稿