【问题标题】:why nth-child in find_by_css returning nothing?为什么 find_by_css 中的 nth-child 什么也不返回?
【发布时间】:2017-09-29 07:08:59
【问题描述】:

我正在尝试从此 html 代码中删除“href”链接:

我的代码是:

from selenium import webdriver
from splinter import Browser
from bs4 import BeautifulSoup
import requests as tt

ar=webdriver.Chrome('/Users/exepaul/Downloads/chromedriver/chromedriver')
url="https://www.python.org/about/"
browser=Browser("chrome")
browser.visit(url)

find_h=browser.find_by_css('div[class="medium-widget success-story-category last"]:nth-child(3) > ul:nth-child(1) > li:nth-child(1) > a')
for i in find_h:
    print(i["href"])

但它什么也没返回

【问题讨论】:

  • 看起来你在混合xpathcss,试试这个:'div.medium-widget.success-story-category.last:nth-child(3) > ul:nth-child(1) > li:nth-child(1) > a'
  • 相同的结果,没有返回。
  • 这个'div.medium-widget.success-story-category.last > ul > li:first-child > a' 似乎对我有用。由于它的父级中只有一个<ul><a> 标签,因此不需要'nth-child(1)' ...如果是这样,则有一个:first-child 伪类

标签: python css python-3.x selenium beautifulsoup


【解决方案1】:

尝试以下方法,

div[class="medium-widget success-story-category last"]:nth-child(2)>ul:nth-child(n)>li:nth-child(1) > a

【讨论】:

  • 我有些困惑,当我这样做时,'div[class="medium-widget success-story-category last"]:nth-child(2)>p' 它给了我

    文本,所以这意味着 'div[class="medium-widget success-story-category last"]:nth-child(2)><p> 标记,但在你的答案中 nth-child(2) 正在选择ul 怎么样?

  • 因为您在选择器中使用 >p
  • 您能否在回答中多解释一下,当我们执行“class : nth-child(2)”它选择父类的第二个孩子或从整个文档中选择第二个类时会发生什么?跨度>
  • 还请解释代码中哪个元素是 nth-child(1) , nth-child(2) , nth-child(3) 以及 nth-child(n) 是什么意思它是如何工作的什么时候用这个?
【解决方案2】:

hello:nth-child(3) 不选择 hello 类的第 3 个嵌套 div,而是在存在三个同名的“hello”类时选择第三个 hello 类。

所以这就是为什么我做错了有两个同名的类,所以我必须做'div[class="medium-widget success-story-category last"]:nth-child(2)>p' 它会选择<p> 文本,当我这样做时:

find_h=browser.find_by_css('div[class="medium-widget success-story-category last"]:nth-child(2) > ul  > li:nth-child(2) > a'

它的工作完美。

【讨论】:

    猜你喜欢
    • 2017-06-11
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2023-01-04
    相关资源
    最近更新 更多