一尘不染

检查Python Selenium是否存在元素

selenium

我有一个问题-我正在使用Selenium(firefox)Web驱动程序打开网页,单击一些链接等,然后捕获屏幕截图。

我的脚本可以从CLI正常运行,但是通过cronjob运行时,它并没有通过第一个find_element()测试。我需要添加一些调试,或一些帮助我弄清为什么失败的东西。

基本上,在进入登录页面之前,我必须单击“登录”锚点。元素的构造为:

<a class="lnk" rel="nofollow" href="/login.jsp?destination=/secure/Dash.jspa">log in</a>

我正在通过LINK_TEXT方法使用find_element:

login = driver.find_element(By.LINK_TEXT, "log in").click()

我有点Python Noob,所以我在和这种语言作斗争…

A)如何检查python是否实际拾取了链接?我应该使用try / catch块吗?

B)是否有比LINK_TEXT更好/更可靠的方式来定位DOM元素?例如,在JQuery中,可以使用更具体的选择器$(’a.lnk:contains(log
in)’)。do_something();


我已经解决了主要问题,这只是手指上的麻烦-我用错误的参数调用脚本-简单的错误。

我仍然想要一些有关如何检查元素是否存在的指针。同样,使用隐式/显式Waits的示例/解释,而不是使用糟糕的time.sleep()调用。

干杯,ns


阅读 351

收藏
2020-06-26

共1个答案

一尘不染

A)是的。检查元素是否存在的最简单方法是find_element在内简单调用try/catch

B)是的,出于两个原因,我总是尝试不使用元素文本来标识元素:

  1. 文本更可能被更改;并且
  2. 如果这对您很重要,则您将无法针对本地化版本运行测试。

解决方案之一:

  1. 您可以使用xpath查找具有ID或其他唯一标识符的父元素或祖先元素,然后找到与或相匹配的子代/后代。
  2. 您可以请求链接本身的ID或名称或其他唯一标识符。

对于后续问题,使用try/catch可以知道如何确定元素是否存在,可以在这里找到很好的等待示例:http
:
//seleniumhq.org/docs/04_webdriver_advanced.html

2020-06-26