Не удается найти элементы с веб-сайта с помощью selenium

#python-3.x #selenium #web-scraping #webdriver

#python-3.x #selenium #очистка веб-страниц #webdriver

Вопрос:

Попытка очистить данные из бизнес-каталога, но я продолжаю получать данные, не найдена

 name = 
driver.find_elements_by_xpath('/html/body/div[3]/div/div/div[1]/div/div[1]/div/div[1]/h4')[0].text
# Results in: IndexError: list index out of range
 

Поэтому я попытался использовать WebDriverWait , чтобы заставить код ждать загрузки данных, но он не находит элементы, хотя данные загружаются на веб-сайт.

 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
import pandas as pd
from bs4 import BeautifulSoup
import requests
import time


url='https://www.dmcc.ae/business-search?directory=1amp;submissionGuid=2c8df029-a92e-4b5d-a014-7ef9948e664b'
driver = webdriver.Firefox()
driver.get(url)

wait=WebDriverWait(driver,50)

wait.until(EC.visibility_of_element_located((By.CLASS_NAME,'searched-list ng-scope')))
name = driver.find_elements_by_xpath('/html/body/div[3]/div/div/div[1]/div/div[1]/div/div[1]/h4')[0].text

print(name)
 

Ответ №1:

 driver.switch_to.frame(driver.find_element_by_css_selector("#pym-0 iframe"))
wait = WebDriverWait(driver, 10)



wait.until(EC.presence_of_element_located(
    (By.CSS_SELECTOR, '.searched-list.ng-scope')))
name = driver.find_elements_by_xpath(
    '/html/body/div[3]/div/div/div[1]/div/div[1]/div/div[1]/h4')[0].text
 

это внутри iframe, для взаимодействия с элементом iframe сначала переключитесь на него. Здесь в iframe нет ни одного уникального идентификатора. Поэтому мы использовали родительский div с уникальным идентификатором в качестве ссылки, из которой мы нашли дочерний iframe

теперь, если вы хотите взаимодействовать вне iframe, используйте;

  driver.switch_to.default_content()
 

Ответ №2:

 <iframe src="https://dmcc.secure.force.com/Business_directory_Page?initialWidth=987amp;amp;childId=pym-0amp;amp;parentTitle=List of Companies Registered in Dubai, DMCC Free Zoneamp;amp;parentUrl=https://www.dmcc.ae/business-search?directory=1&submissionGuid=2c8df029-a92e-4b5d-a014-7ef9948e664b" width="100%" scrolling="no" marginheight="0" frameborder="0" height="3657px"></iframe>
 

Переключитесь на iframe и нажмите кнопку «Принять».

 driver.get('https://www.dmcc.ae/business-search?directory=1amp;submissionGuid=2c8df029-a92e-4b5d-a014-7ef9948e664b')
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#hs-eu-confirmation-button"))).click()
wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,'#pym-0 > iframe')))
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,'.searched-list.ng-scope')))
name = driver.find_elements_by_xpath('//*[@id="directory_list"]/div/div/div/div[1]/h4')[0]
print(name.text))
 

Выводит

 1 BOXOFFICE DMCC