如何识别selenium中的css selector::before不起作用

2024-06-26 01:32:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Selenium获取list::before伪元素中的所有元素。我无法将数据保存到列表中

场景:我想将所有数据放入列表中,列表中包含li中的数据和一个标记

下面是DOM的外观:

enter image description here

我正在使用selenium+python

此代码悬停在主类别导航“女性”:

element_to_select = driver.find_element_by_xpath("//*[@id='nico-main-header']/nav/ul/li[1]")
hover = ActionChains(driver).move_to_element(element_to_select)
hover.perform()
driver.implicitly_wait(15)

打印所有标签:

ele = driver.find_element_by_css_selector("ul .row .col-md-3:first-child ul li")

print(ele)

**但在打印ele时,li锚定标签不会出现


Tags: to数据元素列表bydriverseleniumli
3条回答

您可以使用以下代码: 对于标签

my_a_tag_datas = []      //empty list
a_data = driver.find_elements_by_tag_name("a")   //a tag from web driver
for a_tag_data in a_data:      
    a_tag_data_taxt = a_tag_data.text    // a tag element data convert to text
    my_a_tag_datas.append(a_tag_data_taxt)   //  a tag whole data save in list
print(my_a_tag_datas)    // print list data

对于li标签:相同的代码,请将“a”替换为“li”

注意:如果您保存所有元素而不是文本,请在我添加标签数据的位置添加标签数据

免责声明:这不是一个最佳解决方案。我是第一次使用python,对selenium没有太多的经验

elem = driver.find_element_by_css_selector('.col-md-3').find_elements_by_tag_name('a')

  for a_tag_data in elem:
    a_tag_data_text = a_tag_data.text
    my_a_tag_datas = my_a_tag_datas + a_tag_data_text

print(my_a_tag_datas)

Pseudo Elements

CSSpseudo-element用于为元素的指定部分设置样式。它可用于:

  • 设置元素的第一个字母或行的样式
  • 在元素内容之前或之后插入内容

::之前

^{}在HTML中的任何其他内容之前而不是之后插入内容。使用其中一个的唯一原因是:

  • 您希望生成的内容在位置上位于元素内容之前
  • ::after内容在源代码顺序中也是“在”之后的,因此如果自然地堆叠在彼此的顶部,它将位于::before的顶部

这个用例

要使用SeleniumPython提取<a>标记内的所有文本,必须为visibility_of_all_elements_located()诱导WebDriverWait,并且可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    driver.get("https://nthqibord.com/2019/08/15/pemimpin-pkr-pertahan-tun-mahathir/")
    print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "a#main-category-menu[href='/shop/women/'] + ul.top-nav-border ul li>a")))])
    
  • 使用XPATH

    driver.get("https://nthqibord.com/2019/08/15/pemimpin-pkr-pertahan-tun-mahathir/")
    print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//a[@id='main-category-menu' and @href='/shop/women/']//following::ul[@class='top-nav-border']//ul//li/a")))])
    
  • 注意:您必须添加以下导入:

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

相关问题 更多 >