【问题标题】:Clicking javascript button with Python 3使用 Python 3 单击 javascript 按钮
【发布时间】:2017-06-12 07:01:34
【问题描述】:

我正在尝试在 Python 3.6 中使用 Selenium 单击特定按钮。但按钮不起作用。

检查元素;

<span class="jsgrid-pager-page"><a href="javascript:void(0);">2</a></span>

我试过这段代码;

page_button = browser.find_element_by_class_name("2").click()

我该怎么办?

【问题讨论】:

  • 为什么要查找类名“2”?你有这样的课吗?
  • 因为总页数为 6,但我想获取第 2 页上的信息。
  • 我在我的回答中添加了一些关于为什么这不起作用的解释以及一篇关于定位器的帖子,这将帮助您学习,我希望它会有所帮助:)

标签: python python-3.x selenium


【解决方案1】:

您可以使用链接文本而不是类名,因为“2”不是 HTML 代码中任何标记的类名。你可以试试下面的代码

page_button = browser.find_element_by_link_text("2").click();

【讨论】:

  • selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{"method":"link text","selector":"2"}
【解决方案2】:

您的示例中没有任何元素可以通过以下方式找到:

browser.find_element_by_class_name("2").click()

您现在正在搜索类名称为 2 的元素,例如 &lt;span class="2"&gt;

您可以通过类 jsgrid-pager-page 来定位跨度,但可能会出现更多的类名。

另一种可能性是通过 xpath 定位元素,例如:

//span/a[text()='2'] 

page_button = browser.find_element(By.XPATH, "//span/a[text()='2']").click()

这样,驱动程序将搜索包含 span、anchor 和 2 的部分。

因此,当您想要定位该行中第三个中的第一个时,您只需更改数字

// First
page_button = browser.find_element(By.XPATH, "//span/a[text()='2']").click()
// Third
page_button = browser.find_element(By.XPATH, "//span/a[text()='2']").click()

我建议您阅读一些有关定位器的内容,这将对您将来有所帮助:Locators

【讨论】:

  • 您的XPath 不正确:1) 您应该使用//span 而不仅仅是span,2) 您在一个字符串中使用了两次双引号:XPath 和文本值 - 这将导致错误。您应该混合使用单引号/双引号。使用"contains(text(), '2')" 也是一个坏主意,因为它会匹配所有包含"2" 文本的链接。
  • 很好,我忽略了它,并更新了!。您对比赛的看法是正确的,但比find_element_by_link_text("2") 更准确。因为 xpath 只匹配 &lt;span&gt;&lt;a&gt;2&lt;/a&gt;&lt;/span&gt;
  • find_element_by_link_text("2") 应该与文本内容 "2" 的链接完全匹配,而 find_element_by_xpath("//span/a[contains(text(), '2')]") 将匹配文本内容的链接 "22""something 2" 和其他 OP 不寻找的链接。如果要使用XPath,最好使用更显式的谓词[text()='2']
  • 再次你是对的,我会更新我的答案,所以它会更正确
  • 我复制了 xpath,结果是:xpath 像这样: //*[@id="jsGrid"]/div[3]/div/span[4]/a 如何配置“find_element_by_xpath "
【解决方案3】:

如果通过

但按钮不起作用。

你的意思是按钮没有重定向到某个页面或做某事,这可能是由a 标签内的href="javascript:void(0) 属性解释的。在这种情况下,计算表达式后的 void 运算符将返回 undefined,因此浏览器将停留在同一页面中,并且单击按钮不会执行任何操作。

有关href="javascript:void(0) 的更多信息,请参阅此 SO 帖子


这与您的定位器不正确这一事实无关。请先修复定位器。

【讨论】:

    【解决方案4】:

    没有类名"2" 添加到目标链接HTML。您可以使用链接文本来定位所需的元素。如果使用answer provided by @Ankur Singh 你得到NoSuchElementException 这可能意味着链接是动态生成的,你应该等待它在DOM中出现:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait as wait
    from selenium.webdriver.support import expected_conditions as EC
    
    wait(browser, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, "2"))).click()
    

    【讨论】:

      猜你喜欢
      • 2017-05-28
      • 2023-04-07
      • 2019-03-17
      • 1970-01-01
      • 2012-02-13
      • 2020-11-24
      • 2014-03-03
      • 2012-06-11
      • 1970-01-01
      相关资源
      最近更新 更多