在selenium中,如何从一个父div下的多个div中刮取内容?

2024-03-28 14:09:44 发布

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

你好,我是个新手,我想从一个父div下的多个div中刮取一些文本。。我已经附上了html的屏幕截图html screenshot 在“伙伴关系”类下 有多个类别为“items”的div。。我想从这些div中刮去我标记的div。但是我遇到了一个错误。 这是我使用的代码:

def get_partnerships(driver):
    WebDriverWait(driver,15).until(EC.visibility_of_element_located((By.XPATH,"//div[contains(@class, 'partnerships-cont')]/div[1]")))
    partnerships_cont = driver.find_element_by_xpath("//div[contains(@class, 'partnerships-cont')]")
    items = partnerships_cont.find_element_by_xpath("//div[contains(@class, 'item')]")

    for item in items:
        div = item.find_element_by_xpath("//div[1]")
        text = div.find_element_by_xpath("//div").text
        print(text)

driver = webdriver.Chrome(r'C:\Users\User\AppData\Local\Programs\Python\Python37\Lib\site-packages\chromedriver_py\chromedriver_win32.exe')
driver.get('https://xangle.io/project/ZRX/full-disclosure')
get_partnerships(driver)

无论我做什么,都会出现以下错误:

TypeError: 'WebElement' object is not iterable

你能告诉我为什么会出现这个错误吗?我该如何修复它


Tags: textdivgetbydriver错误itemselement
2条回答

异常,因为它应该是find_elements()而不是find_element()。更改下面的代码并重试

items = partnerships_cont.find_elements_by_xpath("//div[contains(@class, 'item')]")

代码获取名称和描述的优化方式:

def get_partnerships(driver):
    items = driver.find_elements_by_css_selector('div.partnerships-cont>.item')

    for item in items:
        name = item.find_element_by_css_selector('div.name.fv1')
        desc = item.find_element_by_css_selector('div.description.fv1')
        print(name.text)
        print(desc.text)

driver = webdriver.Chrome(r'C:\Users\User\AppData\Local\Programs\Python\Python37\Lib\site-packages\chromedriver_py\chromedriver_win32.exe')
driver.get('https://xangle.io/project/ZRX/full-disclosure')
get_partnerships(driver)

您可以使用简单的css selector实现这一点。诱导WebDriverWait()并等待visibility_of_all_elements_located()

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

driver = webdriver.Chrome(r'C:\Users\User\AppData\Local\Programs\Python\Python37\Lib\site-packages\chromedriver_py\chromedriver_win32.exe')
driver.get('https://xangle.io/project/ZRX/full-disclosure')
elements=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,".partnerships-cont>.item>.info-cont>.name.fv1")))
for ele in elements:
    print(ele.text)

输出

Harbor
Aragon

相关问题 更多 >