【问题标题】:How to send keys to a difficult element in selenium (Python)如何将密钥发送到硒(Python)中的困难元素
【发布时间】:2014-10-02 20:24:02
【问题描述】:

我正在尝试单击网站上没有“ID”或“名称”的小按钮。唯一的唯一标识是onclick,如下:

onclick="submitForm('DefaultFormName',1,{'param1':'HXCTIMECARDACTIVITIESPAGEXgm7J5oT','serverValidate':'1uCdqvhJe','param2':'',event:'details|1'});return false;"

但是,页面上的另一个按钮具有以下 onclick:

onclick="submitForm('DefaultFormName',1,{'param1':'HXCTIMECARDACTIVITIESPAGEXgm7J5oT','serverValidate':'1uCdqvhJe','param2':'',event:'details|2'});return false;"

唯一的区别是代码中间的 1 与 2。我尝试使用带有以下代码的“find_element_by_css_selector”,但它不起作用:

driver.find_element_by_css_selector(".x1p[onclick*='details|1']").click()

另一个选项是选择前面的元素,代码如下:

 precedingbutton = driver.find_element_by_name('B22_1_6')

然后发送标签,然后进入。但是,在我发送 Tab 之后,我不知道在不将 Send_Keys 命令分配回前面的框的情况下发送 Enter 的方法,这会取消选择我想要的按钮。

如果你能帮忙,请告诉我!

【问题讨论】:

    标签: python selenium sendkeys


    【解决方案1】:

    如果您可以找到父级,则可以使用 xpath 或 nth-child css 选择器相对于它来定位子级。

    编辑以响应 cmets:

    假设“2 个元素相距”是指它是目标之前的兄弟,尝试类似td[name="B22_1_6"] + td + td。这是sibling selector

    【讨论】:

    • 前面的框不是父框。只是表中的另一个元素。该表也没有名称或 ID,所以我不确定如何引用它。
    • @jcfollower 正要这么说。
    • 你们中的哪一位可以帮我编写这种方法的代码吗?我可以按名称从这个“td”找到两个级别的“td”,所以我知道我的代码以:browser.find_element_by_css_selector(“td#B22_1_6”开头,但在那之后我有点迷路了,因为我离两个元素
    • #是id选择器,如果要使用name,则必须使用属性访问。
    【解决方案2】:

    你可以很容易地做到这一点

    driver.find_element(By.XPATH, 'your xpath').click()
    

    要查找 xpath ,只需使用 firebug 检查按钮,然后在 html 选项卡中右键单击所选元素并单击 Copy XPath。

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 2020-09-22
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 2016-04-23
      相关资源
      最近更新 更多