Как я могу очистить что-то от нескольких div'ов под одним родительским div в селене? - PullRequest
0 голосов
/ 16 апреля 2020

Здравствуйте, я новичок в очистке, я хочу очистить некоторый текст от нескольких div, которые находятся под одним родительским div .. Я приложил снимок экрана html. html screenshot Под классом "partnerships_cont" есть несколько div с классом "items" .. из этих 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

Пожалуйста, не могли бы вы сказать мне, почему я получаю эту ошибку? и как мне это исправить?

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Вы можете использовать простое 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
1 голос
/ 16 апреля 2020

Исключение, потому что оно должно быть 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...