【问题标题】:Clicking Specific button with Selenium使用 Selenium 单击特定按钮
【发布时间】:2016-03-10 17:24:12
【问题描述】:

我正在尝试使用 Python 中的 Selenium 单击特定按钮,但无法识别该特定按钮。例如,如果我在this 的谷歌页面上,并且我想让翻译栏下拉,我将如何引用该特定元素。在我的浏览器中检查它,我看到一些我认为是它的数据:

    <div style="clear: both;" aria-controls="uid_0" aria-expanded="false"
     class="_LJ _qxg xpdarr _WGh vk_arc" data-fbevent="fastbutton" jsaction="kx.t;
 fastbutton: kx.t" role="button" tabindex="0" data-ved="0ahUKEwiwn-6K17XLAhVLWD4KHTk9CTkQmDMILzAA">

但是,从这一点来看,我不确定如何通过函数使用 find 元素来引用我需要的内容才能正确调用它。

driver.find_element_by_*("?").click()

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

#comment
print ("Let's talk about Python.")


driver = webdriver.Firefox()

driver.get("http://www.google.com")

assert "Google" in driver.title

elem = driver.find_element_by_name("q")

elem.send_keys("ignominious")
elem.send_keys(Keys.RETURN)

driver.find_element_by_*("?").click()


assert "No results found." not in driver.page_source

driver.close()

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    您可以将css_selector 与类属性一起使用

    driver.find_element_by_css_selector("._LJ._qxg.xpdarr._WGh.vk_arc").click()
    

    class_name 与任何一个类

    driver.find_element_by_class_name("_LJ").click()
    # or
    driver.find_element_by_class_name("_qxg").click()
    # or
    driver.find_element_by_class_name("xpdarr").click()
    # or
    driver.find_element_by_class_name("_WGh").click()
    # or
    driver.find_element_by_class_name("vk_arc").click()
    

    向子元素发送点击也可以

    driver.find_element_by_class_name("vk_ard").click()
    

    【讨论】:

    • 您好,感谢您的回复。我试过了,但它似乎没有用,我将编辑我的帖子以显示我到目前为止的所有代码,以防万一。
    • 是的,我得到的错误太长了,无法评论,这里是:pastebin.com/07JRHd6W
    • @TheOneTrueSign 我的错,应该是driver.find_element_by_class_name("_WGh")driver.find_element_by_class_name("vk_arc")。我修复了答案并添加了一个选项
    • 谢谢,但遗憾的是,这些都没有使翻译选项卡下拉。问题可能出在我的代码中的其他地方吗?
    • @TheOneTrueSign 它的秒数。每次您执行driver.find_element() 时,它将最多查找 10 秒的元素。当然你可以增加或减少时间。
    【解决方案2】:

    为了更好的可维护性,您应该尝试使用 id。

    在您的示例中,选择器将是:

    driver.find_element_by_css_selector("#uid_1 > div[role='button']").click()
    

    【讨论】:

    • 感谢您的建议,但对我来说,该代码似乎并没有使下拉栏展开。也许这是我代码中其他地方的问题?
    • 对不起,我拿错了身份证。我更新了答案。
    • 谢谢,这行得通。如果我可以问,我知道你从哪里得到“#uid_1”但是你从哪里得到 ">div[role='button']"。输入 id 后是否包含该标准?
    • 我从鼠标应该点击的元素中得到了 div[role='button'] 。这是一个属性选择器 (developer.mozilla.org/en/docs/Web/CSS/Attribute_selectors)。是的,在 id 之后使用组合符是一种常见的做法。
    【解决方案3】:

    你想点击箭头。 如果是,那么下面的代码对我有用:-

        driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
        driver.get("https://www.google.com/");
    
        driver.findElement(By.name("q")).sendKeys("ignominious");
        driver.findElement(By.name("q")).sendKeys(Keys.RETURN);
    
        driver.findElement(By.className("vk_ard")).click();
    

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 2021-03-31
      • 2021-04-07
      • 2017-06-03
      • 2013-11-12
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 2020-09-04
      • 2021-01-31
      相关资源
      最近更新 更多