WebDriver 无法使用 xpath 找到元素,Htmlagilitypack 无法

2023-12-10

我在使用 Html Agility Pack 时不断遇到问题;我的 XPath 查询仅在极其简单时才有效:

//*[@id='some_id']

or

//input

然而,当它们变得更加复杂时,Html Agility Pack 就无法处理它。 下面是一个演示该问题的示例,我使用 WebDriver 导航到 Google,并返回页面源,该页面源被传递给 Html Agility Pack,并且 WebDriver 和 HtmlAgilityPack 都尝试定位元素/节点 (C#):

//The XPath query
const string xpath = "//form//tr[1]/td[1]//input[@name='q']";

//Navigate to Google and get page source
var driver = new FirefoxDriver(new FirefoxProfile()) { Url = "http://www.google.com" };
Thread.Sleep(2000);

//Can WebDriver find it?
var e = driver.FindElementByXPath(xpath);
Console.WriteLine(e!=null ? "Webdriver success" : "Webdriver failure");

//Can Html Agility Pack find it?
var source = driver.PageSource;
var htmlDoc = new HtmlDocument { OptionFixNestedTags = true };
htmlDoc.LoadHtml(source);
var nodes = htmlDoc.DocumentNode.SelectNodes(xpath);
Console.WriteLine(nodes!=null ? "Html Agility Pack success" : "Html Agility Pack failure");

driver.Quit();

在本例中,WebDriver 成功找到了该项目,但 Html Agility Pack 却没有找到。

我知道,我知道,在这种情况下,将 xpath 更改为可用的路径非常容易://输入[@name='q'],但这只会解决这个特定的例子,这不是重点,我需要一些东西exactly或者至少closely镜像 WebDriver 的 xpath 引擎的行为,甚至是 Firefox 的 FirePath 或 FireFinder 插件的行为。

如果 WebDriver 找不到它,那么为什么 Htmlagilitypack 也找不到它?


您遇到的问题与 FORM 元素有关。 HTML 敏捷包以不同方式处理该元素- 默认情况下,它永远不会报告它有孩子。

在您给出的特定示例中,此查询确实找到了目标元素:

.//div/div[2]/table/tr/td/table/tr/td/div/table/tr/td/div/div[2]/input

然而,事实并非如此,所以很明显表单元素正在困扰解析器:

.//form/div/div[2]/table/tr/td/table/tr/td/div/table/tr/td/div/div[2]/input

不过,这种行为是可配置的。如果您在解析 HTML 之前放置此行,则表单将为您提供子节点:

HtmlNode.ElementsFlags.Remove("form");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebDriver 无法使用 xpath 找到元素,Htmlagilitypack 无法 的相关文章

  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 使用 DOM 获取 div 的内容(包括子标签)

    我正在使用 DOM 来获取 div 标签的内容 但内部 html 部分未显示 功能是 dom new DOMDocument libxml use internal errors true dom gt loadHTMLFile url l
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 由于链接器无法找到同名的 .lib 文件,因此无法构建 Dll 项目

    我是 Visual Studio 2010 环境的新手 我得到了一个使用 Visual Studio 2008 开发的源代码库 我正在尝试在 VS 2010 中构建它 但构建失败 因为链接器显示错误 LINK 致命错误 LNK1181 无法
  • 如何通过保持 webDriver 处于活动状态来关闭整个浏览器窗口?

    在我的批处理执行中 第一个场景会打开多个具有多个选项卡的浏览器 我想在开始第二个场景之前关闭所有这些浏览器 Driver close 只是关闭浏览器的一个选项卡 Driver quit 正在关闭所有浏览器并结束WebDriver会议 因此
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • 处理来自 api 调用的文件下载

    在反应中 我正在根据 John Culviner 中提到的解决方案测试我的文件下载这个帖子 axios post api downloadMyFile data then response gt const url window URL c
  • jQuery.datepicker.formatDate 和时区偏移

    为了处理日期 我使用 jQuery UIpublic我的应用程序中的方法 jQuery datepicker formatDate 请参阅此处的参数和来源 https github com jquery jquery ui blob mas
  • 在 ASP.NET MVC 5 中将整个对象从视图传递到控制器

    有没有办法将整个对象从 ASP NET MVC 5 视图传递到控制器 这是我的情况 我有一个显示数据库表中所有行的视图 视图的模型是 IEnumerable 每行数据后面都有一个链接 可通往支架式 UPDATE 视图 有没有办法将整个对象传
  • C#/IRS ACA - 使用 WCF 4.5 发送带有 MTOM 附件和 GZip 编码的 Web 服务请求

    我们正在尝试通过公开的 Web 服务将数据发送到 IRS 以进行 ACA 数据传输 但由于安全标头中时间戳和签名元素的顺序 我们无法使 WSE 3 0 方法发挥作用 当 TimeStamp 元素出现在 Signature 元素之前时 IRS
  • Windows 上的 Pyusb - 没有可用的后端

    我正在尝试通过 USB 将我的 Python 应用程序接口与 NFC 设备连接 最好的选择似乎是PyUSB 但我无法让它连接到 libusb 后端 我不断得到 ValueError 没有可用的后端 我查看了堆栈跟踪 发现usb backen
  • 具有多次重复的 scikit-learn GridSearchCV

    我正在尝试为 SVR 模型获取最佳参数集 我想使用GridSearchCV超过不同的值C 然而 从之前的测试中 我注意到训练 测试集的划分极大地影响了整体性能 在本例中为 r2 为了解决这个问题 我想实现重复的 5 倍交叉验证 10 x 5
  • C# 中的 CS0649 错误

    代码中存在一个我找不到的错误 某些变量根本无法工作 我收到的警告 CS0649 字段 Calculations A 从未分配 并且始终具有默认值 0 ABC Formule path Calculations cs CS0649 字段 Ca
  • Ruby 哈希值总和

    我有一个哈希数组 players id gt 1 name gt Alda dice count gt 5 hand gt 6 5 2 4 3 id gt 2 name gt Gonzalo dice count gt 5 hand gt
  • Directdraw:旋转视频流

    Problem Windows Mobile Directdraw 旋转视频流 视频预览正在工作 我现在需要的只是旋转图像的方法 我认为处理这个问题的唯一方法是编写一个基于的自定义过滤器CTransformFilter这将为您旋转相机图像
  • Linux 找不到动态链接的应用程序

    我有一个运行 Linux Kernel 3 10 和 Busybox 的嵌入式系统 如果我交叉编译 由 bu ildroot 构建工具链 因此使用 uclibc 一个没有 static 标志的程序 它不会运行 bin sh hellowor
  • 频繁登录和退出后 Google 登录失败

    我最初可以多次使用 Google 帐户登录我的应用程序 一切安好 但如果我在一两分钟内签入和签出大约 20 次 Google 登录失败并重新登录onActivityResult函数 返回错误代码12501 resultCode 0 我使用的
  • svm scikit learn 中的类权重 = none 和 auto 之间有什么区别

    在 scikit learn svm 分类器中 class weight None 和 class weight Auto 之间有什么区别 从文档中它给出为 将类 i 的参数 C 设置为 SVC 的 class weight i C 如果没
  • 有两个变量的“for 循环”? [复制]

    这个问题在这里已经有答案了 如何在同一个变量中包含两个变量for loop t1 a list of integers strings and lists t2 another list of integers strings and li
  • 从重复值中提取 DataFrame

    我有一个 DataFrame 其中有一列 其中存储了与不同数据相关的更多重复项 A B 1 120 abc 2 121 def 3 122 ghi 4 121 abc 5 120 def 6 121 def 7 122 abc 8 121
  • 从 C# 调用 Outlook VBA 代码

    在 Visual Studio 中 我正在创建一个插件 在 addin startup 中 我将 Outlook 应用程序设置为 app Microsoft Office Interop Outlook ApplicationClass M
  • Android 上的“transition”是无效的资源目录名称吗?

    我从 Android 示例项目创建了 ApiDemos 项目 不幸的是 该项目抱怨invalid resource directory name transition ApiDemos res line 1 Android AAPT Pro
  • 设置导航栏标题的对齐方式

    我试图将导航栏的标题与我的应用程序的中心对齐 但标题似乎保留在右侧 请查找屏幕截图 我正在使用下面的代码 void viewDidLoad UIBarButtonItem addButton UIBarButtonItem alloc in
  • 如何在媒体播放器中播放字节数组中的视频

    我正在使用连接到我的 Android 设备的 USB 设备 该设备向我发送一个包含视频帧的缓冲区 它不断地剂量 当我收到缓冲区时 我应该将特定的标头放入其中并将其作为 m4v 视频文件写入 SD 卡 那我应该在媒体播放器中播放它 到目前为止
  • sql IN 运算符

    我有下面的 sql 但无法让它工作 select product category select top 1 sub category from sub categories where product category IN keywor
  • WebDriver 无法使用 xpath 找到元素,Htmlagilitypack 无法

    我在使用 Html Agility Pack 时不断遇到问题 我的 XPath 查询仅在极其简单时才有效 id some id or input 然而 当它们变得更加复杂时 Html Agility Pack 就无法处理它 下面是一个演示该