当前位置: 首页 > 知识库问答 >
问题:

如何通过硒找到元素

关正雅
2023-03-14

我将Selenium与PHP WebDriver结合使用。我试图单击导航栏中的链接,该链接显示在HTML中,如下所示:

<li class=""><a href="javascript:;" showpage="cards"><i class="zzdi zzdi-closed-caption zzdi-hx-fw"></i> User Cards</a></li>

我正在尝试选择元素,然后单击它。但是,当我尝试使用xpath时,如下所示:

//a[@showpage="cards"]

//*[@showpage="cards"]

我得到以下错误:

没有这样的元素:无法定位元素:{“method”:“xpath”,“selector”:“/*[@showpage=“cards”]”}(会话信息:chrome=70.0.3538.110)(驱动程序信息:chromedriver=2.43.600233(523efee95e3d68b8719b3a1c83051aa63aa6b10d),平台=Linux 4.15.0-43-generic x86\u 64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:24毫秒,用于记录此错误,请访问:http://seleniumhq.org/exceptions/no_such_element.html构建信息:版本:“3.4.0”,版本:“未知”,时间:“未知”系统信息:主机:“ubuntu”,ip:“127.0.1.1”,操作系统。名称:“Linux”,操作系统。arch:“amd64”,操作系统。版本:“4.15.0-43-generic”,java。版本:“1.8.0\u 191”驱动程序信息:org。openqa。硒。铬。ChromeDriver功能[{mobileEmulationEnabled=false,hasTouchScreen=false,platform=LINUX,acceptSslCerts=false,goog:chromeOptions={debuggerAddress=localhost:4343431},acceptInsecureCerts=false,webStorageEnabled=true,browserName=chrome,takesScreenshot=true,javascriptEnabled=true,setWindowRect=true,unexpectedAlertBehaviour=,applicationCacheEnabled=false,rotatable=false,networkConnectionEnabled=false,chrome={chromedriverVersion=2.43.600233(523efee95e3d68b8719b3a1c83051aa63aa6b10d),userDataDir=/tmp/.org.chromium.TecyQo7},takesHeapSnapshot=true,pageLoadStrategy=normal,databaseEnabled=false,handlesAlerts=true,version=70.0.3538.110,browserConnectionEnabled=false,nativeEvents=true,locationContextEnabled=true,CSSSelectorEnabled=true}]会话ID:367080a50b61c75a8c16a17b954a5972***元素信息:{使用=xpath,值=/*[@showpage=“cards”]}

如果您能提供有关如何使用xpath或如何使用任何其他选择方法的帮助,使我能够单击链接,我们将不胜感激。

共有3个答案

东方飞捷
2023-03-14

显然,由于窗口大小的差异(我的机器与Selenium使用的虚拟屏幕),导航栏没有显示,因此找不到元素

在进行变通方法时发现了这一点—使用“a”标记获取所有元素,然后遍历它们。只有在单击额外按钮以显示导航栏后,才能找到元素。

阎坚成
2023-03-14

要在具有文本作为用户卡的元素上调用click(),因为该元素是启用JavaScript的元素,您需要诱导WebDriverWait使该元素可单击,并且可以使用以下任一解决方案

>

User Cards

使用CSS_SELECTOR

a[showpage='cards']>i.zzdi.zzdi-closed-caption.zzdi-hx-fw

使用XPATH:

//a[@showpage='cards' and normalize-space()='User Cards']
微生鸿轩
2023-03-14

您可能需要等待元素才能单击它:

$driver->wait()->until(
  WebDriverExpectedCondition::elementToBeClickable(WebDriverBy::xpath('//a[@showpage="cards"]')))->click();
 类似资料:
  • 我需要在HTML中找到此元素 我就是这样做的 使用XPATH,由Chrome控制台生成: 使用XPATH,它正在寻找某种正则表达式: 最后使用XPATH,它通过页面精确到我的元素 他们都没有工作。All给出了一个例外 硒。常见的例外情况。InvalidSelectorException:Message:u'由于以下错误,给定的选择器无法找到具有xpath表达式的元素:\n语法错误:表达式不是合法表

  • 我的HTML代码如下: 我必须通过数据钩子搜索元素,因为类名对于其他属性也是通用的,而且href和link文本是动态的,因为它对于下一个元素是变化的,因为我需要获取多个元素。 我可以通过数据钩子搜索它吗?如果是的话,有人能帮我吗!

  • 任何提示都会很有帮助!

  • 大家好,我正试图在网站中找到一个元素,但出于某种原因,它不允许我。该网页是Reddit的登录形式,我尝试输入用户名和密码,但当我列出所有输入时,它只出现在顶部搜索栏中。我想这是因为它就像在另一个“标签”一样,它会弹出到前面,但我不知道如何管理它。提前谢谢。

  • URL:http://bcmprod.brill.com/rsuite-cms/ 我正在尝试从上面的客户端站点自动下载手稿。我在C#中使用selenium phantomjs。 我有用户凭据。但是,组成登录表单的元素(例如用户名、密码)在页面源中不存在,但当您在浏览器中检查这些元素时,这些元素就存在了。 这些是我用来从“检查元素”中定位它们的xpath(ID是动态分配的,这就是我没有使用它们的原因

  • 我想从以下html行中选择文本: 我尝试使用xpath。但由于某些原因,selenium无法通过xpath找到此元素。我想通过“data reactid”属性选择文本。我不知道该怎么做。我在python中使用selenium。