我有个问题;我正在使用 Selenium (Firefox) 网络驱动程序打开网页,单击几个链接等,然后捕获屏幕截图。
我的脚本在 CLI 中运行良好,但是当通过 cron 作业 运行时,它没有通过第一个 find_element() 测试。我需要添加一些调试,或帮助我找出失败原因的东西。
基本上,在进入登录页面之前,我必须单击“登录”锚点。元素的构造是:
<a class="lnk" rel="nofollow" href="/login.jsp?destination=/secure/Dash.jspa">log in</a>
我正在使用 find_element By LINK_TEXT 方法:
login = driver.find_element(By.LINK_TEXT, "log in").click()
A) 我如何检查链接是否真的被 Python 拾取了?我应该使用 try/catch 块吗?
B) 是否有比 LINK_TEXT 更好/更可靠的定位 DOM 元素的方法?例如,在 jQuery 中,您可以使用更具体的选择器 $(‘a.lnk:contains(log in)’).do_something();
我已经解决了主要问题,这只是手指的麻烦。我用不正确的参数调用脚本 - 一个简单的错误。
我仍然想要一些关于如何检查元素是否存在的指示。此外,还有一个隐式/显式等待的示例/解释,而不是使用糟糕的 time.sleep() 调用。
原文由 nonshatter 发布,翻译遵循 CC BY-SA 4.0 许可协议
A)是的。检查元素是否存在的最简单方法是在
find_element
try/catch
。B) 是的,我总是尝试在不使用文本的情况下识别元素,原因有二:
解决方案是:
对于后续问题,使用
try/catch
是判断元素是否存在的方法,可以在此处找到等待的好例子: http://seleniumhq.org/docs/04_webdriver_advanced.html