gpt4 book ai didi

Python,Selenium用类查找元素并等待类更改

转载 作者:行者123 更新时间:2023-11-28 21:34:30 25 4
gpt4 key购买 nike

我有一个网页,它可以动态加载内容,而页面加载时却有纺车,我已经找到了解决方案来抓取立即在页面上加载的内容,但似乎找不到解决方案来抓取稍后在dom中加载的内容。

我能想到的是找到具有特定类型旋转轮毂的元素,并等待其更改(一旦更改),这意味着内容已加载到dom中。

我在Selenium上将Firefoxwebdriver Ubuntu一起使用。

这是我要监视的类(class):

<div class="wheel spinning"></div>

加载内容后,车轮停止旋转并将类更改为:
<div class="wheel"></div>

任何人都可以找到解决方案来查找和监视 class="wheel spinning",一旦将其更改为 class="wheel"即可继续获取数据。

编辑:

XPATH实际上解决了解决方案的一部分,这是代码的一部分
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//*[@class='wheel']))
)
title = driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[3]')
print(title.text)

但是,如果元素在10秒钟内未出现,则错误消失了,现在可以找到一种方法,可以一次又一次地重试,直到页面上出现该元素为止。
presence_of_element_located((By.XPATH))find_element_by_xpath的使用是否有区别

最佳答案

@LucasTierney的答案是正确的方向。但是我仍然觉得该解决方案可以按以下方式进行优化:

由于是可见的,因此您需要使用 presence_of_element_located() 方法来代替visibility_of_element_located()方法。

节点:

<div class="wheel spinning"></div>

不能通过包含单个类的XPath进行定位,即仅​​ wheel ,如下所示:
el = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, "//*[@class='wheel']")))

相反,您可以使用 Locator Strategies之一:
  • cssSelector:
    el = WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.wheel.spinning")))
    WebDriverWait(driver, 10).until(lambda d: 'spinning' not in el.get_attribute('class'))
  • xpath:
    el = WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='wheel spinning']")))
    WebDriverWait(driver, 10).until(lambda d: 'spinning' not in el.get_attribute('class'))
  • 关于Python,Selenium用类查找元素并等待类更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53240157/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com