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 建议使用包含在其 href 和 find_element_by_xpath() 方法中的唯一片段来使用更简单/更清晰的定位 anchor 标记的样式。
    下面的代码就像一个魅力:
    choose_account = driver.find_element_by_xpath("//a[contains(@href,'SWEForm11_0,c_45')]")
    choose_account.click()
    

    最佳答案

    尝试使用具有更好选择器的常规单击。

    css: a[href*=SWESubmitForm]

    xpath 使用部分 href value://a[包含(@href, 'SWESubmitForm')]

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

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

    相关文章:

    javascript - 在表单输入中指定逗号后的最大长度

    javascript - 如何计算两个元素之间的宽度?

    python - 有没有更快的方法将@property用于类中的多个属性?

    java - 如何使用 Java 使用 Selenium WebDriver 捕获 JavaScript 错误

    android - Appium - 在 Mac 上的 "buildAndroidBootstrap"任务中,reset.sh 失败并出现错误

    c# - Web 应用程序 - 仪表板类型 GUI - 界面

    javascript - 随机播放 HTML 列表元素顺序

    python - 使 __str__ 或 __repr__ 将列表作为字符串返回

    javascript - gcp上的html中的js(本地测试)无法正常工作

    javascript - 如何在 Java 中使用 Selenium WebDriver 和/或 Sikuli 平滑滚动