Python Selenium:点击一个href =“javascript :()”

时间:2018-03-30 19:04:32

标签: javascript python selenium

我正在使用chromedriver,我有以下网页来源:

       attackingUnit = selectUnit(input.nextInt());
    attackerUnitName = attackingUnit.getUnitName();
    //check if its valid
    if(attackerUnitName==Unit.Unknown){
    //unit is unknown ,tell the user the input was invalid
    } else {
    //input was valid, do what you want to do
    }

点击任何一个href后,浏览器会转到新页面,但网址保持不变。 我想要实现的是点击第一个href,即<form id="stepLinksForm" name="stepLinksForm" method="POST" target="mainFrame"> <ul> <li> <a href="javascript:submitLink('action_one.htm')">Action One</a> </li> <li> <a href="javascript:submitLink('action_two.htm')">Action Two</a> </li> <li> <a href="javascript:submitLink('action_three.htm')">Action Three</a> </li> </ul> </form>

我已尝试过find_element_by_xpath,link_text和互联网上建议的其他一些方法,但它们都不起作用。 如果有人可以提供帮助,我真的很感激。

2 个答案:

答案 0 :(得分:2)

要点击第一个href文本 Action One ,您可以使用以下任一选项( Python语言装订艺术):

  • linkText

    driver.find_element_by_link_text("Action One").click()
    
  • cssSelector

    driver.find_element_by_css_selector("a[href*='action_one.htm']").click()
    
  • xpath

    driver.find_element_by_xpath("//a[contains(@href,'action_one.htm') and contains(.,'Action One')]").click()
    

更新

由于您无法通过LINK_TEXTCSSXPATH找到该元素,甚至在time.sleep()之后,因此几乎可以确认该元素位于 frame ,由 <frame> 标记表示。

现在,您可以通过&#34;检查&#34; 来查看它们,找到 HTML DOM 中的元素并遍历 HTML 。在某些时候,您会找到<frame>标记。首先将<frame>代码和开关的属性添加到目标框架,然后尝试使用我提供的定位器策略回答。在这里,您可以找到关于How can I select a html element no matter what frame it is in in selenium?

的详细讨论

答案 1 :(得分:0)

而不是点击,您可以直接调用javascript代码:

browser.execute_script("submitLink('action_one.htm')")

相当于javascript:submitLink('action_one.htm')

或者你可以通过它的文字找到a:

browser.find_elements_by_xpath("//a[contains(text(), 'Action One')]")