浠水一枝花 2024-03-31 15:02 采纳率: 50%
浏览 20
已结题

selenium中css_selector如何选择具有相同class属性的第二个标签

img

img


我想在b站上用selenium实现翻页,但b站“下一页”按钮不是超链接,无法使用By.LinkText。现在用By.css_selector,本来是直接“.vui_button.vui_pagenation--btn.vui_pagenation--btn-side”但结果显示找不到,现在换了一种选择方式如图中所示,确实能翻页,但是一直在一、二页来回翻,是因为“上一页”和“下一页”的class属性是一样的,请问应该如何选择第二个含有class属性的标签,还有能帮我解释一下为什么“.vui_button.vui_pagenation--btn.vui_pagenation--btn-side”定位不成功吗?

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-31 15:02
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 根据提供的截图,我们可以发现问题在于:
    1. 使用By.css_selector定位“下一页”按钮失败,原因可能是选择器不准确或标签未加载等原因。
    2. 使用By.css_selector定位“上一页”和“下一页”按钮成功,但翻页不成功,原因可能是选择器未定位到正确的按钮。 解决方案: 针对第一个问题,我们可以尝试修改选择器,或者等待页面加载完毕再进行定位。针对第二个问题,我们可以选择定位所有带有相同class属性的标签,并根据位置来选择正确的标签。 具体实现方法如下:
    3. 定位“下一页”按钮 可以尝试使用以下选择器:
    next_button = driver.find_element_by_css_selector('.be-pager-next')
    

    如果定位失败,可以尝试等待页面加载完毕再进行定位,代码如下:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    # 等待页面加载
    wait = WebDriverWait(driver, 10)
    next_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.be-pager-next')))
    
    1. 定位“上一页”和“下一页”按钮 可以使用以下选择器定位所有带有class属性的按钮:
    buttons = driver.find_elements_by_css_selector('.be-pager-item')
    

    然后根据按钮位置来选择:

    previous_button = buttons[0]
    next_button = buttons[-1]
    

    这样就能正确选择“上一页”和“下一页”按钮了。 3. 关于选择器不准确的问题 选择器不准确可能是因为页面结构发生了变化,或者选择器有误。可以通过浏览器的开发者工具来检查选择器是否准确。如果选择器有误,可以修改选择器。如果页面结构发生了变化,可以重新分析页面结构并修改选择器。 参考代码:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    driver = webdriver.Chrome()
    driver.get('https://www.bilibili.com/video/BV1it411s7KA')
    # 等待页面加载
    wait = WebDriverWait(driver, 10)
    next_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.be-pager-next')))
    # 获取所有带有class属性的按钮
    buttons = driver.find_elements_by_css_selector('.be-pager-item')
    previous_button = buttons[0]
    next_button = buttons[-1]
    # 点击按钮翻页
    next_button.click()  # 点击下一页
    previous_button.click()  # 点击上一页
    driver.quit()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 创建了问题 3月31日

悬赏问题

  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画