我试图使用Selenium WebDriver(C#(点击YouTube视频下的评论区域(添加公众评论(。
但是Selenium不能识别id="header"的div下的元素。 在此处输入图像描述 此代码正常工作:
var element = driver
.FindElement(By.Id("comments"))
.FindElement(By.Id("header"));
但在这种情况下,它返回空集合:
var elements = driver
.FindElement(By.Id("comments"))
.FindElement(By.Id("header"))
.FindElements(By.Id("placeholder-area"));
我已经尝试过驱动程序。带有框架的 SwitchTo((,但它没有帮助
我也试过
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMinutes(1));
wait.Until(d => d
.FindElement(By.Id("comments"))
.FindElement(By.Id("header")).Displayed);
我得到了Web驱动程序超时异常,在这里输入图像描述
在我尝试之后
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMinutes(1));
wait.Until(d => d
.FindElement(By.Id("comments"))
.FindElement(By.Id("header")).Enabled);
var element = driver.FindElement(By.Id("comments"))
.FindElement(By.Id("header")).FindElement(By.Id("simple-box"));
我刚刚得到了简单盒子的NoSuchElementException
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMinutes(1));
wait.Until(d => d.FindElement(By.Id("comments"))
.FindElement(By.Id("header")).FindElement(By.Id("simple-box")).Enabled);
我也尝试使用完整的 xpath 到当前元素
var element = driver
.FindElement(By.XPath("//*[@id='simple-box']"));
var element = driver.FindElement(By.XPath("/html/body/ytd-app/div/ytd-page-manager/ytd-watch-flexy/div[4]/div[1]/div/ytd-comments/ytd-item-section-renderer/div[1]/ytd-comments-header-renderer/div[5]"));
我刚刚尝试在YouTube中找到这些元素。看起来"评论"部分没有完全加载。尝试先滚动到该部分:
var comments = driver.FindElement(By.Id("comments"));
((IJavaScriptExecutor)driver).ExecuteScript($"window.scrollTo({comments.Location.X}, {comments.Location.Y})");
之后,将显示等待标头。