javascript - Selenium / python : JavaScript href refuses to execute

标签 javascript python selenium

因此,我在 Python 3.5 上运行 Selenium,试图单击一个带有 JavaScript 函数作为其 href 的按钮。我已经尝试过帮助其他人的解决方案,但我的问题不会让步。

版本 list :

  • Selenium 3.0.2
  • Anaconda 4.1.1 上的 Python 3.5.2
  • 火狐 51.0.1

按钮的html如下:

<tbody>
    <tr>
        <td>
            <a href='JavaScript:SWESubmitForm(document.SWEForm11_0,c_45,"s_11_1_0_0","")' tabindex="1700">Choose Account</a>
        </td>
    </tr>
    <tr>
        <td>View a different account</td>
    </tr>
</tbody>

我已经尝试过的所有解决方案都移动到正确框架中的正确元素,并且看起来好像正在执行点击而没有抛出任何异常,但 Selenium 在任何情况下都无法让脚本运行。这令人费解,因为手动单击打开的 webdriver 窗口中的链接可以完美运行并加载下一页。我通过 webdriver.FirefoxProfile() 对象启用了 JavaScript。

下面的(尽管有些困惑)xpath 是我找到的移动到正确元素的最佳方法,它确实每次都能找到正确的元素,但是它在任何情况下都不会执行脚本。

choose_account = driver.find_element_by_xpath('//*[/html/body/table[3]/tbody/tr/td[3]/\
span[1]/form/table[2]/tbody/tr/td/table/tbody/tr/td/table[2]/tbody/tr[2]/td[2]/\
table/tbody/tr[1]/td/a]')

方法一[失败]:将鼠标直接移动到元素上并单击。方法运行时不会抛出错误或异常。页面没有变化。 JS不执行

action = webdriver.common.action_chains.ActionChains(driver)
action.move_to_element_with_offset(choose_account, 0, 0)
action.click()

方法二[因错误而失败]:尝试完全按照元素的 href 值中所写的方式运行脚本。抛出异常:

driver.execute_script('SWESubmitForm(document.SWEForm11_0,c_45,"s_11_1_0_0","").click();')

抛出的异常:

ReferenceError: SWESubmitForm is not defined

方法三[失败]:尝试在元素上使用 JavaScript 执行器。方法运行时不会抛出错误或异常。页面没有变化。 JS不执行

driver.execute_script("arguments[0].click();", choose_account)

有没有人知道这里可能发生的事情?我真的很茫然。

中号

更新:[已解决] 感谢 Lauda 建议使用更简单/更清晰的样式来定位 anchor 标记,使用其 href 中包含的独特片段和 find_element_by_xpath() 方法。 下面的代码就像一个魅力:

choose_account = driver.find_element_by_xpath("//a[contains(@href,'SWEForm11_0,c_45')]")
choose_account.click()

最佳答案

尝试使用常规点击和更好的选择器。

css: a[href*=SWESubmitForm]

xpath 使用部分 href 值://a[contains(@href, 'SWESubmitForm')]

xpath 使用完整的 href 值://a[@href='add_entire_href_value_here']

关于javascript - Selenium / python : JavaScript href refuses to execute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42008263/

相关文章:

javascript - 半圆动画从按钮单击开始

python - 如何安装 python distutils

seleniumclear() 命令不清除元素

javascript - 如何让网络上的其他人可以访问 node.js 服务器?

javascript - 如何调用子组件的实例方法?

javascript - IE Edge Angular 1.0.3 与 1.2.0 不显示结果 JSON Feed

python - 通过 Pandas 连接(许多)CSV 文件

python - 如何使用自定义名称执行不带 .py 扩展名的 python 脚本

python - 单击站点上的 Selenium 返回到类似状态和陈旧错误

java - 如何获取gmail登录表单中包含错误消息的Web元素