【问题标题】:Python Selenium: Find element by CSS PropertiesPython Selenium:通过 CSS 属性查找元素
【发布时间】:2020-10-30 10:39:44
【问题描述】:

大家好!这是我的第一个问题,我希望我没有违反任何规则。任何帮助都非常感谢 - 提前谢谢大家!

我的问题可以描述如下: 我正在尝试在两个连续的标题之间抓取内容。找到第一个标题相当容易,因为我知道它的确切名称。但是,我没有关于第二个连续标题的信息,除了它必须具有相同的样式 CSS 属性。

我的方法是找到下一个具有相同 CSS 属性的元素,例如相同的“font-size”等。但是,它不能正常运行.

这是一个简化的简短示例,说明了我正在努力实现的目标。不幸的是,我的代码总是会为我提供空结果:

##Get the attribute of the first element (header), which I found already##
attr1 = str(element.value_of_css_property("font-size"))

##Get list of items with the same css-property so that I can find the "consecutive element"
elements = driver.find_elements_by_css_selector("*[font-size='"+attr1 +"']")

由于我是编程新手,请原谅我初学者的错误。

【问题讨论】:

  • 您可以改用get by XPath 吗?
  • @MichaelMü 使用相关的 HTML 更新问题
  • @Jacques:没错,使用 XPath 是更简单的方法。谢谢你的帮助! PS,这是我的解决方案:elements = driver.find_elements_by_xpath('//*[contains(@style,"'+attr1+'") or contains(@style,"'+attr2+'")]')
  • @DebanjanB:谢谢,我已经想通了。不过,非常感谢您对我的问题感兴趣!

标签: python css selenium


【解决方案1】:

您可能想改用 xpath 定位。定位元素比使用没有 id 或类的 css 样式或元素更容易。

您可以阅读更多here

【讨论】:

    【解决方案2】:

    当通过 css 属性搜索时,我通常会这样做:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    css_selection = '[font-size="%s"]' % attribute
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, css_selection)))
    element = driver.find_element_by_css_selector(css_selection)
    

    您不需要星号,我认为您使用了太多引号。格式化字符串比连接更容易。不确定这是否能解决您的确切问题,因为我不知道该项目的全部细节,但只要我使用它就可以工作。

    【讨论】:

    • 非常感谢您的贡献!虽然我已经切换到 xpath,但如果我发现我的 xpath 解决方案返回错误的结果,我可能会在未来的项目中使用你的方法。
    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2021-11-21
    • 2013-08-19
    • 2022-07-08
    • 2020-11-29
    相关资源
    最近更新 更多