c# - 无法从 HTML 网页获取元素
问题描述
我正在尝试使用 Selenium 在 C# 中填充 HTML 网页(http://wasitviewed.com),但无论我尝试什么,当我尝试找到具有以下错误的网站元素时,它总是崩溃:
OpenQA.Selenium.NoSuchElementException: 'no such element: Unable to locate element: {"method":"name","selector":"href"}
我正在使用以下代码:
using (IWebDriver driver = new ChromeDriver())
{
driver.Navigate().GoToUrl("http://www.wasitviewed.com/");
IWebElement query = driver.FindElement(By.Name("href"));
query.SendKeys("test");
}
我也尝试过使用 xPath,但这也失败了。
有没有一种更简单的方法可以找到网页的元素,或者有没有一种方法可以让我遍历整个网页以找到不同的元素及其各自的 id?
解决方案
在上面提到的 URL 中,所有元素都驻留在 iframe 中。因此,您需要在找到查询元素之前将焦点移动到框架中,否则NoSuchElementException
将被抛出。
每当 iframe 中存在任何元素时,您都需要使用以下任何一种方法将焦点移动到框架中。
使用索引:
索引从第 0 帧开始。因此,您可以使用索引切换到帧,如下所示
driver.SwitchTo().Frame(0);//Here only one frame is available.so, Index is 0
使用框架名称或 ID:
通过其(框架)名称或 ID 选择框架。name 属性总是优先于 id 属性。
driver.SwitchTo().Frame(<<Frame Name or ID>>);
目前,框架名称/ID 在上述 URL 中不可用。因此,您不能使用框架名称或 ID。
使用框架 WebElement:
您需要WebElement
使用任何一种定位器策略找到框架(Name,Id,ClassName,TagName,XPath,CssSelector
),它可用于将焦点移动到相应的框架。
//Here only one frame is available.So, I have used FindElement
var frameElement= driver.FindElement(By.TagName("iframe"));
driver.SwitchTo().Frame(frameElement);
工作代码:
选项1 :
using (IWebDriver driver = new ChromeDriver())
{
driver.Navigate().GoToUrl("http://www.wasitviewed.com/");
driver.SwitchTo().Frame(0);
IWebElement query = driver.FindElement(By.Name("href"));
query.SendKeys("test");
}
选项 2:
using (IWebDriver driver = new ChromeDriver())
{
driver.Navigate().GoToUrl("http://www.wasitviewed.com/");
var frameElement= driver.FindElement(By.TagName("iframe"));
driver.SwitchTo().Frame(frameElement);
IWebElement query = driver.FindElement(By.Name("href"));
query.SendKeys("test");
}
推荐阅读
- node.js - 使用 node.js 监控 icecast
- mysql - 我不小心删除了 mysql 中的主用户,现在我没有任何访问权限
- r - 如何使用 if contains similar, then in R
- php - 如何使用变量搜索特定列数据并更新其列数据
- google-cloud-platform - 如何在 Google Cloud Platform 上为我的组织禁用结算帐户创建?
- scala - Scala Visbility 规则对包范围特征的问题,示例取自猫内部
- amazon-web-services - 如何编码部署 appspec.yml runas ubuntu 用户
- javascript - 将文本放在缩略图旁边而不是中心
- c# - 在 C# 应用程序中获取 Kafka 心跳状态
- python - 删除熊猫中方差低的列