我试图访问PenFed以获取当前未付金额。我做了相当多的研究,但不幸的是,我仍然被难住了。我使用的是pythonselenium,我试图单击侧面的初始登录按钮以查看用户名字段。这是元素的HTML代码:
<a href="https://www.penfed.org/" class="pfui-button-login login-slide-button pfui-button pfui-btn-tertiary-dark-blue-outline" id="mobile-login" data-di-id="#mobile-login">Login</a>
当我尝试运行以下代码时:
^{pr2}$我得到以下错误:
^{3}$即使我尝试使用WebDriver等待函数,例如:
try:
WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.ID, "mobile-login"))).click()
except ElementNotVisibleException:
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.ID, "mobile-login"))).click()
不管我让他们等多久,我都会收到一条超时消息:
raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message:
我所有的研究都说,调用wait函数应该可以解决这个问题,但它对我不起作用。我还读到,在点击按钮之前,我必须调用元素的顶部可能有一个图像覆盖,但我在网站代码中也没有看到任何内容。如果我正在测试它,我能够通过代码点击按钮的唯一方法是先实际单击它,所以我不知道还有什么可以使用的。提前感谢您的帮助!在
更新:我发现以下代码适用于我:
element = driver.find_element_by_id("mobile-login")
driver.execute_script("$(arguments[0]).click();", element)
但我不知道execute_脚本的实际用途。或者有人能解释其他的代码吗?在
所需元素是一个动态元素,因此要定位元素,您必须诱导WebDriverWait,以便元素可单击,您可以使用以下解决方案:
代码块:
浏览器快照:
您尝试单击的链接是针对移动站点的,如果您以桌面分辨率查看该站点,则该链接不可见。如果您缩小浏览器,直到它改变布局,您将看到登录按钮出现对应的链接。这就是为什么你得到
ElementNotVisibleException
。在关于第二个问题,使用
.execute_script()
起作用的原因是它直接执行JS并且可以单击任何东西。。。不管隐藏与否。Selenium被设计成像用户一样与页面交互,所以它不会让你点击不可见的元素等等。 如果您想让您的脚本像用户一样工作,您应该避免使用.execute_script()
,因为它允许您在页面上执行用户不能执行的操作。在如果您想像桌面用户一样登录,您需要使用下面的CSS选择器单击“登录”按钮
这将打开一个侧面板,您可以在其中输入用户名等,然后登录。仅供参考。。。在继续打开进程之前,您可能需要等待一个机会。在
您指定的代码是JQuery。
execute_script(p1, p2)
运行一个js脚本,其中p1是脚本(在您的例子中是单击元素的JQuery行),p2是所需的元素。如果arguments[0]
等于“element”,似乎不需要p2,但我不完全确定。在一个潜在的修复方法是使用计数器来计算您单击元素的次数。如果计数器达到某个数字并且页面没有改变(您可以通过在当前页面上找到一个唯一的元素/值来进行检查),那么您就知道它是不可单击的。在
祝你好运!在
相关问题 更多 >
编程相关推荐