微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Selenium / Python:JavaScript href拒绝执行

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

版本库存:

>硒3.0.2
> Anaconda 4.1.1上的Python 3.5.2
> Firefox 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()方法中包含的唯一片段.
以下代码就像一个魅力:

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’]

原文地址:https://codeday.me/bug/20190701/1351214.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐