【问题标题】:How do I target a div with a certain style with Selenium in Python?如何在 Python 中使用 Selenium 定位具有特定样式的 div?
【发布时间】:2019-05-02 13:28:45
【问题描述】:

您好,我正在尝试定位一个颜色选择器弹出窗口。 Selenium 在选择器中找不到元素,我认为这与网站代码中有很多相同的 div 的事实有关。

我的想法是我必须按风格选择,因为这是唯一不同的地方。(见截图)

但我无法按样式进行选择

我尝试过通过 Xpath 和 CSS 选择器。但我一定是做错了什么。

我现在拥有的是:


driver.find_element_by_class_name("sp-replacer").click()

driver.find_element_by_css_selector(".div[style='position: absolute; top: 721.203px; left: 0px;']")

【问题讨论】:

  • 请阅读为什么a screenshot of code is a bad idea。粘贴代码并正确格式化它。此外,我们需要能够看到每个 DIV 的内部(或至少是它们的代表性样本),以便我们可以为您提供一个好的定位器。
  • 从下面的 cmets 中,您似乎找到了自己问题的答案。请发布对您有用的内容,并确保将其标记为答案。此外,对您认为有帮助的任何答案进行投票,即使它们没有解决您的问题。

标签: python selenium selenium-webdriver xpath selenium-chromedriver


【解决方案1】:

尝试类似:

//div[contains(@class,'some_wanted_class') and contains(@class,'other_wanted_class') and not(contains(@class,'some_unwanted_term_in_class'))]

【讨论】:

    【解决方案2】:

    使用以下 CSS 选择器。

    element=driver.find_element_by_css_selector('div.sp-container.sp-light[style="position: absolute; top: 721.203px; left: 0px;"]')
    

    要处理动态元素,请使用带有 CSS 选择器定位器的 WebdriverWait。

    element=WebDriverWait(driver,40).until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'div.sp-container.sp-light[style="position: absolute; top: 721.203px; left: 0px;"]')))
    

    请注意,您需要有以下导入

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions
    

    【讨论】:

    • 嗨!非常感谢您的回复。我已经尝试过了,但不幸的是 selenium 找不到元素:消息:没有这样的元素:无法找到元素:{“method”:“css selector”,“selector”:“.div [style ='position:absolute ; top: 721.203px; left: 0px;']"} 我也尝试过动态元素方法,这会导致超时错误
    • @Cennnn:你现在可以试试吗
    • 再次感谢你,我又做了一次,但不幸的是它给了我同样的结果
    • 我想通了!我必须定位主体(它所在的)并且我需要排除“sp-hidden”类,这样只有正确的 div 被定位。所以xpath是: //body[@class='portfolio upload-work create lang-en']//*[contains(@class, 'sp-container sp-light sp-buttons-disabled sp-palette-disabled' ) 而不是(contains(@class, 'sp-hidden'))]//*[@class='sp-input']") 谢谢你的帮助!
    【解决方案3】:

    这是我宁愿使用的 xpath,因为类名不同。

    //div[@class='sp-container sp-light sp-buttons-disabled sp-palette-disabled']
    

    【讨论】:

    • 嗨!感谢您的帮助!不幸的是,我已经尝试过了,不过我现在又做了一次。但是 Selenium 仍然找不到它。
    • 你没有得到这样的元素异常吗?元素是否会出现在 iframe 中?
    • 在此处查看我对check if the element present in the iframe的逻辑的回答
    • 我想通了!我必须定位主体(它所在的)并且我需要排除“sp-hidden”类,这样只有正确的 div 被定位。所以xpath是: //body[@class='portfolio upload-work create lang-en']//*[contains(@class, 'sp-container sp-light sp-buttons-disabled sp-palette-disabled' ) 而不是(contains(@class, 'sp-hidden'))]//*[@class='sp-input']") 谢谢你的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    相关资源
    最近更新 更多